![]() |
[求助]求解一个化不开的函数的作图
请高手指教一下这个图怎么画:
tanh(pi/0.65*w*sqrt(k^2-1))=1/(17.36-0.715i)*sqrt(k^2+17.36-0.715i)/sqrt(k^2-1) 我想作横坐标为w=0:100,纵坐标分别为k的实部和虚部,估计Real范围在0:12;Imag范围在0:0.4,我刚学Matlab不久,只会一般的画图,但是这个函数我化不开那个在双曲线和根号里的k值,请高手看看怎么解决,谢谢:lovely: |
[SIZE="4"]竟然是个 隐函数,并且还是个复变函数的[/SIZE] :lovely:
怎么什么事情都让你赶上了 |
个人建议,直接离散化w,用for循环对每个w求解方程(solve()),最后应该得到与每个w对应的k序列,然后分列实部(real())虚部(imag()),分别绘图。
这样做虽然比较笨,但是应该可以解决问题,只是要注意,for循环变量不要用i、j,否则会与虚数(-1)^(1/2)冲突。 |
[QUOTE=watcher;13052]个人建议,直接离散化w,用for循环对每个w求解方程(solve()),最后应该得到与每个w对应的k序列,然后分列实部(real())虚部(imag()),分别绘图。
这样做虽然比较笨,但是应该可以解决问题,只是要注意,for循环变量不要用i、j,否则会与虚数(-1)^(1/2)冲突。[/QUOTE] 请问可不可以直接帮我编一个出来,我自己水平有限,一直不能汇出这个图,假如我只算w=10情况下的k,那怎么算呢:lovely: |
文件名:f1.m
内容: function F=f1(k,w) F=tanh(pi/0.65*w*sqrt(k^2-1))-1/(17.36-0.715*i)*sqrt(k^2+17.36-0.715*i)/sqrt(k^2-1); --------------------------------------------------------- 文件名:*.m 内容: clear all; w=0:0.1:100;%这里设了步长0.1,可自行调节 for n=1:size(w,2) k(n)=fsolve(@(k)f1(k,w(n)),6,optimset('Display','off','TolFun',1e-6));%用了fsolve,实际上是当作优化问题处理了 end kr=real(k); ki=imag(k); subplot(1,2,1);%左边的画实部 plot(w,kr); subplot(1,2,2);%右边的画虚部 plot(w,ki); --------------------------------------------------------- ps:获得的图形很奇特,不连续,如果w代表频率,想不出k代表什么。 LZ可以用命令 tanh(pi/0.65*w.*sqrt(k.^2-1))-1./(17.36-0.715*i).*sqrt(k.^2+17.36-0.715*i)./sqrt(k.^2-1); 验证计算结果 |
[QUOTE=fanxing39;13041][SIZE="4"]竟然是个 隐函数,并且还是个复变函数的[/SIZE] :lovely:
怎么什么事情都让你赶上了[/QUOTE] 請使用 ezplot函數 此函數可以直接針對隱函數畫圖 ezplot('tanh(pi/0.65*w*sqrt(k^2-1))=1/(17.36-0.715i)*sqrt(k^2+17.36-0.715i)/sqrt(k^2-1)') :smile: |
:biggrin: [QUOTE=watcher;13059]文件名:f1.m
内容: function F=f1(k,w) F=tanh(pi/0.65*w*sqrt(k^2-1))-1/(17.36-0.715*i)*sqrt(k^2+17.36-0.715*i)/sqrt(k^2-1); -----------------------------...[/QUOTE] Thank you ,已经解决了,你的方法是正确的,至于图像离奇是因为我看漏了w的单位,应该设为w=0:0.001:0.1,修改后得到我想要的图了,:biggrin: |
[QUOTE=watcher;13059]文件名:f1.m
内容: function F=f1(k,w) F=tanh(pi/0.65*w*sqrt(k^2-1))-1/(17.36-0.715*i)*sqrt(k^2+17.36-0.715*i)/sqrt(k^2-1); -----------------------------...[/QUOTE] 还有一个问题,如果我用双纵轴画图,怎么修改另外一条纵轴的scale和label呢? clear all; w=0:0.001:0.1;%这里设了步长0.001,可自行调节 for n=1:size(w,2) k(n)=fsolve(@(k)f1(k,w(n)),6,optimset('Display','off','TolFun',1e-6));%用了fsolve,实际上是当作优化问题处理了 end kr=real(k); ki=imag(k); plotyy(w,kr,w,ki); axis([0,0.1,0,12[COLOR="Red"][COLOR="red"],]);%另外一条纵轴ki我想设为scale为0:0.4,并加上标题[/COLOR][/COLOR] |
自己解决了,例如可以用以下实现:
x=0:pi/50:pi; y1=sin(x); y2=cos(x); ax=plotyy(x,y1,x,y2); %%%%%% 新加程序%%%%%%%% ylim(ax(2),[-2 2]) ylabel(ax(2),'Y2 axis') 以下是matlab自带的例子,同样可以解决问题 >> x = 0:0.01:20; y1 = 200*exp(-0.05*x).*sin(x); y2 = 0.8*exp(-0.5*x).*sin(10*x); [AX,H1,H2] = plotyy(x,y1,x,y2,'plot'); >> set(get(AX(1),'Ylabel'),'String','Slow Decay') set(get(AX(2),'Ylabel'),'String','Fast Decay') >> xlabel('Time (\musec)') title('Multiple Decay Rates') >> set(H1,'LineStyle','--') set(H2,'LineStyle',':') 希望这个帖子对大家有用拉:smile: |
[QUOTE=fgabertb;13060]請使用 ezplot函數 此函數可以直接針對隱函數畫圖
ezplot('tanh(pi/0.65*w*sqrt(k^2-1))=1/(17.36-0.715i)*sqrt(k^2+17.36-0.715i)/sqrt(k^2-1)') :smile:[/QUOTE] 不错的方法,不过不区分实部、虚部? |
所有时间均为北京时间。现在的时间是 19:46。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.