Matlab 求数值解

作者&投稿:智波 (若有异议请与网页底部的电邮联系)
怎么用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

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

ezplot('x-mod(x,100)-49/0.15',[0 1000])

这是函数f(x)=x-mod(x,100)-49/0.15
在0~1000范围里的图像

可见,如果有数有解,解会出现在x=400附近


这是函数值最接近0附件的图像

ezplot('x-mod(x,100)-49/0.15',[350 450])

可见,函数是不连续的正好在x=400前后出现跳变

如果x<400得到的值是-26.66667

如果x>=400得到的值是73.33333

所以函数的确是没有解的,因为不可能有一个x取值使得f(x)=0



退而求其次,你可以用fzero函数平时用来数值解方程的函数,来求得这个跳变点

fun=@(x) x-mod(x,100)-49/0.15;

fzero(fun,0)


ans =


  400.0000


一般如果是连续的函数,fzero(fun,x0)可以找出函数在x0点附近的数值近似解

fzero的原理是找出函数前后符号相反的点,不断缩小区间知道满足精度


用于你这个函数,fzero找到一个点400,之前f(x)<0,之后f(x)>0

但实际上,f(x)取不到0




中卫市17192984925: 用matlab求数值解
典菡谓香: syms y1 y2; a=dsolve('Dy1=y2','(1+t^2)*Dy2=2*t*y2','y1(0)=1','y2(0)=3'); 运行结果: >> a.y1 ans = 3*t+t^3+1 >> a.y2 ans = 3+3*t^2 >> function dy=myfun(t,y) dy=zeros(2,1); dy(1)=y(2); dy(2)=2*t*y(2)/(1+t^2); [t,y]=ode45(@myfun,[0 10],[1 3]) plot(t,y(:,1)); 网络故障,不小心发了两遍

中卫市17192984925: 用matlab解方程组的数值解,急 -
典菡谓香: 解对初值很敏感, 需要提供初值试了试,当初值取很大时解收敛于V=0.072,R=35.622,C=1.2618

中卫市17192984925: matlab求数值解
典菡谓香:(1+x²)y''=2xy' y''/y'=2x/(1+x²) 两边积分 lny'=ln(1+x²)+c y'=c1(1+x²) y导|x=0=3 代入得 y'=c1*1=3 c1=3 y'=3(1+x²) 两边积分,y=3x+x^3+c2 y|x=0=1 代入得c2=1 因此特解,y=3x+x^3+1 希望能帮到你,祝学习进步

中卫市17192984925: matlab 数值解比如有方程 y^3+x^2+3x - 2y=1 其中x的区间为0到10 如何让matlab求解数值解y呢? -
典菡谓香:[答案] x = 0; feqn = @(y) y^3+x^2+3*x-2*y-1; y = fzero(feqn, 1); 这样就可以求出x=0时y的解.不断改变x就可以求出对应的y.

中卫市17192984925: matlab中怎么求一元十次方程的数值解?列如:ax^10+bx^8+cx^6+dx^4+ex^2=0;其中:a,b,c,d,e均是已知的参数 -
典菡谓香:[答案] 这个可以用solve这个函数来解 syms x; solve(a*x^10+b*x^8+c*x^6+d*x^4+e*x^2) 注意 要将上面的式子中的具体参数带进去,运行就可以了

中卫市17192984925: Matlab 求数值解 -
典菡谓香: ezplot('x-mod(x,100)-49/0.15',[0 1000])这是函数f(x)=x-mod(x,100)-49/0.15在0~1000范围里的图像可见,如果有数有解,解会出现在x=400附近这是函数值最接近0附件的图像ezplot('...

中卫市17192984925: matlab求方程数值解 -
典菡谓香: 你的意思是不是这样: clear;a=1; for n=1:3x=eval(abs(solve('sqrt(x*x-a*a/4)+sqrt(1-a*a/4)=1','x'))) endx = 0.51760.5176

中卫市17192984925: Matlab 求解方程组数值解dx/dt = yz;dy/dt = - xz;dz/dt = - 0.51xy;初始条件:x(0)=0 ,y(0) = 1 ,z(0) = 1 ,求0 -
典菡谓香:[答案] clear;clc[T,Dxyz]=ode45('sdfd',[0 12],[0;1;1]);plot(T,Dxyz)--------------------------function dxyz=sdfd(t,x)dxyz=[0;0;0];dxyz(1) = x(2)*x(3);dxyz(2) = -x(1)*x(3);dxyz(3) = -0.51*x(1)*x(2);

中卫市17192984925: 用matlab 解这个方程的数值解,急 -
典菡谓香: x=fsolve(fun,x0)求解fun(x)=0的解,x0是初值,fun是函数,x就是解 比如解方你的方程可定义一个函数 function y=f(x) y=(ln(0.2-x)-ln(0.04-x))/(ln(0.2-x)-ln(0.013-x))-0.55 再到主界面 x=fsolve(@f,0) 0是初始值 也可直接使用 fsolve(@(x)([(log(0.2-x)-log(0.04-x))/(log(0.2-x)-log(0.013-x))-0.55]),0)

中卫市17192984925: 用MATLAB语言求微积分方程的数值解.(xd^2y)/dx^2 - 5dy/dx+y=0y(0)=0y'(0)=0 -
典菡谓香:[答案] function dy=myfun03(x,y)dy=zeros(3,1) %初始化变量dydy(1)=y(2); %dy(1)表示y的一阶导数,其等于y的第二列值dy(2)=5/x*y(3)-y(1); %dy(2)表示y的二阶导数%ex0808 用ode23 ode45 ode113解多阶微分方程clear,clc[x23,y23]=ode23('myfun03',[1,10],[1 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网