matlab解方程数值解(matlab数值求解方程)
用matlab求解微分方程初值问题数值解和解析解,求解范围为区间.并画出其数值解和解析解曲线。
用matlab求解微分方程初值问题数值解和解析解,可以这样处理:
一、数值解
微分方程初值问题数值解可以用ode函数求解。
首先,自定义微分方程的函数,即
dy = 3/x*y+x^3*(exp(x)+cos(x))-2*x;
其二,确定初始条件,即
y0=[(exp(pi)+2/pi)*pi^3];
其三,使用ode45函数,求出其数值解【x,y】
二、解析解
微分方程初值问题解析解可以用dsolve函数求解。
首先,对y(x)进行变量声明,即
syms y(x)
其二,对y(x)求一阶导数,即
Dy=diff(y,1)
其三,使用dsolve函数,求出其解析解y(x)的表达式
y=dsolve(Dy==3/x*y+x^3*(exp(x)+cos(x))-2*x,y(pi)==(exp(pi)+2/pi)*pi^3)
三、绘制数值解和解析解曲线
首先,使用plot函数,绘出数值解的曲线
plot(x.y)
其二,计算x在【π,2π】区间内的一系列若干个值与y相当于的y值
其三,再使用plot函数,绘出解析解的曲线
运行代码后可以得到如下结果。
如何用Matlab编程计算二阶常微分方程组的数值解
用Matlab编程计算二阶常微分方程组的数值解的方法有很多种,最常用有ode45函数。
ode45函数的使用格式:
【t,y】=ode45(odefun,tspan,y0)
例如:
odefun=@(t,y)[y(1)+2*y(2);3*y(1)+2*y(2)]; %自定义函数
tspan=[0 20]; %时间
y0=[1 1]; %初值
[t,y]= ode45(odefun,tspan,y0);
A=[t,y];
A
运行结果
如何用matlab求解微分方程组的数值解
在Matlab下输入:edit
zhidao_feiying.m,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function
y=zhidao_feiying(t,x)
a=1;
b=2;
c=3;
d=4;
%%比方说
%f=a*x+y-z;
%g=b*sin(x*y)-c*cos(z);
%h=d*y-a*x;
%%注意x用x(1)代,y用x(2)代,z用x(3)代
f=a*x(1)+x(2)-x(3);
g=b*sin(x(1)*x(2))-c*cos(x(3));
h=d*x(2)-a*x(1);
y=[f;g;h];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在Matlab下面输入:
t_end=5;
x0=[1;1;1];
[t,x]=ode45('zhidao_feiying',[0,t_end],x0);
plot(t,x)
legend('x','y','z')
上面只是固定d的情况,
你如果想做出随d的变化,估计比较麻烦一些,一方面ode45并不是等不长的。
另一方面,参数不好弄。

如何用matlab求方程的所有整数解
如何用matlab求方程的所有整数解?其解决方案,可以通过下列途径解决:
方法一、利用三循环语句和判断语句,求解其所有整数解
方法二、整数线性规划分支定界法,求解其所有整数解
下面按第一种方法求解,其过程为
m=50;n=50;l=50;
disp('满足条件:2x+3y+4z=100的解')
for i=1:m
? for j=1:n
? ? ? for k=1:l
? ? ? ? ? x=i;y=j;z=k;
? ? ? ? ? xyz=100-(2*x+3*y+4*z);
? ? ? ? ? if xyz==0
? ? ? ? ? ? ? disp(['x=',num2str(i),' y=',num2str(j),' z=',num2str(k)])
? ? ? ? ? end
? ? ? end
? end
end
运行结果
如何用matlab求方程的数值解
fun=@(x,y)y.*log10(y)-x创建关于x,y的匿名函数
log10(x)由于Matlab中自然对数的符号是log(与我们数学上的不同),以10为底的对数符号是log10,同理有log2,但是没有log3等哦
vpa将得到的符号解转化为指定精度的小数,比如vpa('sqrt(2)',10)将sqrt(2)表示10位精度的小数
fzero是Matlab求解一元函数零点的内置函数
fsolve是Matlab中求解方程组解(可以求解复数)的内置函数,功能强于fzero
fval是返回fun(x)的值,也就是说fzero和fsolve返回方程的解x,那么此时的fun(x)就是fval
这个方法比较多 可以数值也可以解析求解
1.解析求解
solve('y*log10(y)=3','y')
ans =
3*log(10)/lambertw(3*log(10))
vpa(ans)
ans =
4.5555357051951280236911974082484
2.数值解法这个可以使用fsolve和fzero,前者的功能更加强大,但是对于这个问题fzero就可以了
x=3;
fun=@(y)y*log10(y)-x;
%使用fsolve
[x,fval]=fsolve(fun,rand)
Optimization terminated: first-order optimality is less than options.TolFun.
x =
4.5555
fval =
3.9620e-008
%使用fzero
[x,fval]=fzero(fun,5)
x =
4.5555
fval =
-8.8818e-016
matlab求解非线性方程的数值解
1、在文件编辑区建立待求方程组文件并保存:
function
y=fun(x)
y=[0.56-1.1018*x(1)*(exp(-0.1855014*x(2))-exp(-2.007944*x(2))),0.4-1.1018*x(1)*(exp-0.1855014*(x(2)+2)-exp(-2.007944*(x(2)+2)))]
2、在malab命令窗口求解:
clear
x0=[0.1
0.1];
fsolve(@fun,x0,optimset('fsolve'))
求解得出g=x(1)=;x(2)=;
3、绘制曲线
y=sym('1.1018*g*(exp(0.1855014*x)-exp(-2.007944*x))')%别忘了把g的值代入
ezplot(y)