查看完整版本 : [求助]求解一个化不开的函数的作图
请高手指教一下这个图怎么画:
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:
fanxing39
2008-06-23, 17:56
竟然是个 隐函数,并且还是个复变函数的 :lovely:
怎么什么事情都让你赶上了
个人建议,直接离散化w,用for循环对每个w求解方程(solve()),最后应该得到与每个w对应的k序列,然后分列实部(real())虚部(imag()),分别绘图。
这样做虽然比较笨,但是应该可以解决问题,只是要注意,for循环变量不要用i、j,否则会与虚数(-1)^(1/2)冲突。
个人建议,直接离散化w,用for循环对每个w求解方程(solve()),最后应该得到与每个w对应的k序列,然后分列实部(real())虚部(imag()),分别绘图。
这样做虽然比较笨,但是应该可以解决问题,只是要注意,for循环变量不要用i、j,否则会与虚数(-1)^(1/2)冲突。
请问可不可以直接帮我编一个出来,我自己水平有限,一直不能汇出这个图,假如我只算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);
验证计算结果
fgabertb
2008-06-24, 01:27
竟然是个 隐函数,并且还是个复变函数的 :lovely:
怎么什么事情都让你赶上了
請使用 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: 文件名: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);
-----------------------------...
Thank you ,已经解决了,你的方法是正确的,至于图像离奇是因为我看漏了w的单位,应该设为w=0:0.001:0.1,修改后得到我想要的图了,:biggrin:
文件名: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);
-----------------------------...
还有一个问题,如果我用双纵轴画图,怎么修改另外一条纵轴的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,]);%另外一条纵轴ki我想设为scale为0:0.4,并加上标题
自己解决了,例如可以用以下实现:
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:
請使用 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:
不错的方法,不过不区分实部、虚部?
fanxing39
2008-06-25, 02:54
:tongue: 认真在读程序,希望,我也能像他那么强 :cry:
vBulletin® v3.8.3,版权所有 ©2000-2025,Jelsoft Enterprises Ltd.