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
典菡谓香: 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 ...