matlab解方程数值解(matlab数值求解方程)

http://www.itjxue.com  2023-01-25 06:36  来源:未知  点击次数: 

用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)

(责任编辑:IT教学网)

更多