关于matlab求解函数的问题
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/03 00:47:48
关于matlab求解函数的问题
有一个函数组
y=(1-(1-x^0.25)^4)+10*x;
z=10*(1-(1-x^0.25)^4);
y,z都是关于x的函数,现在知道了y值,且y值在不停的变化,求出随着y值变化时的z值
y=0:0.1:12;
用matlab怎么解决?
有一个函数组
y=(1-(1-x^0.25)^4)+10*x;
z=10*(1-(1-x^0.25)^4);
y,z都是关于x的函数,现在知道了y值,且y值在不停的变化,求出随着y值变化时的z值
y=0:0.1:12;
用matlab怎么解决?
![关于matlab求解函数的问题](/uploads/image/z/2255890-58-0.jpg?t=%E5%85%B3%E4%BA%8Ematlab%E6%B1%82%E8%A7%A3%E5%87%BD%E6%95%B0%E7%9A%84%E9%97%AE%E9%A2%98)
从原理上说,相当于已知 y=f(x),z=g(x),现在想求出函数 z=h(y) 来.
如果 f 的逆函数 x=F(y) 能求出来,那么问题就会非常简单,直接代入 z=g(x)=g(F(y)) 即可.但现在的问题在于,f 的逆函数的显式表达式很难求出来,那么比较有可操作性的就是用数值方法来做.
对于y=0:0.1:12,可以绘制y-x曲线:
ezplot('(1-(1-x^0.25)^4)+10*x',[0 1.2])
axis auto
![](http://img.wesiedu.com/upload/8/e7/8e70577fd3ccb6613235759e3223992e.jpg)
可见,取x=1-1.2之间,足以提供y=0-12之间的值,而且y随x单调变化,所以可以使用插值的方法由y来求得相应的x,然后再代入g(x)求出z即可:
x=[0:0.000001:0.02 0.03:0.01:1.2];
y=(1-(1-x.^0.25).^4)+10*x;
yi=0:0.1:12;
xi=interp1(y,x,yi);
z=10*(1-(1-xi.^0.25).^4);
plot(yi,z)
xlabel('y')
ylabel('z')
需要说明的是,在x=0附近y变化比较剧烈,而后面变化平缓,所以在x<0.02时取较小的步长以确保精度.
![](http://img.wesiedu.com/upload/a/c9/ac98ff167ddea600c54646214e1eaaa4.jpg)
如果 f 的逆函数 x=F(y) 能求出来,那么问题就会非常简单,直接代入 z=g(x)=g(F(y)) 即可.但现在的问题在于,f 的逆函数的显式表达式很难求出来,那么比较有可操作性的就是用数值方法来做.
对于y=0:0.1:12,可以绘制y-x曲线:
ezplot('(1-(1-x^0.25)^4)+10*x',[0 1.2])
axis auto
![](http://img.wesiedu.com/upload/8/e7/8e70577fd3ccb6613235759e3223992e.jpg)
可见,取x=1-1.2之间,足以提供y=0-12之间的值,而且y随x单调变化,所以可以使用插值的方法由y来求得相应的x,然后再代入g(x)求出z即可:
x=[0:0.000001:0.02 0.03:0.01:1.2];
y=(1-(1-x.^0.25).^4)+10*x;
yi=0:0.1:12;
xi=interp1(y,x,yi);
z=10*(1-(1-xi.^0.25).^4);
plot(yi,z)
xlabel('y')
ylabel('z')
需要说明的是,在x=0附近y变化比较剧烈,而后面变化平缓,所以在x<0.02时取较小的步长以确保精度.
![](http://img.wesiedu.com/upload/a/c9/ac98ff167ddea600c54646214e1eaaa4.jpg)