Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2008-06-23, 16:22   #1
OKboy
初级会员
 
注册日期: 2008-06-23
年龄: 41
帖子: 7
声望力: 0
OKboy 正向着好的方向发展
默认 [求助]求解一个化不开的函数的作图

请高手指教一下这个图怎么画:
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:
OKboy 当前离线   回复时引用此帖
旧 2008-06-23, 17:56   #2
fanxing39
高级会员
 
注册日期: 2007-12-02
年龄: 44
帖子: 303
声望力: 31
fanxing39 是一位成功的新星fanxing39 是一位成功的新星fanxing39 是一位成功的新星fanxing39 是一位成功的新星
默认

竟然是个 隐函数,并且还是个复变函数的 :lovely:
怎么什么事情都让你赶上了
fanxing39 当前离线   回复时引用此帖
旧 2008-06-23, 21:11   #3
watcher
高级会员
 
注册日期: 2008-04-02
年龄: 47
帖子: 175
声望力: 21
watcher 正向着好的方向发展
默认

个人建议,直接离散化w,用for循环对每个w求解方程(solve()),最后应该得到与每个w对应的k序列,然后分列实部(real())虚部(imag()),分别绘图。
这样做虽然比较笨,但是应该可以解决问题,只是要注意,for循环变量不要用i、j,否则会与虚数(-1)^(1/2)冲突。
watcher 当前离线   回复时引用此帖
旧 2008-06-23, 22:50   #4
OKboy
初级会员
 
注册日期: 2008-06-23
年龄: 41
帖子: 7
声望力: 0
OKboy 正向着好的方向发展
默认

引用:
作者: watcher 查看帖子
个人建议,直接离散化w,用for循环对每个w求解方程(solve()),最后应该得到与每个w对应的k序列,然后分列实部(real())虚部(imag()),分别绘图。
这样做虽然比较笨,但是应该可以解决问题,只是要注意,for循环变量不要用i、j,否则会与虚数(-1)^(1/2)冲突。
请问可不可以直接帮我编一个出来,我自己水平有限,一直不能汇出这个图,假如我只算w=10情况下的k,那怎么算呢:lovely:
OKboy 当前离线   回复时引用此帖
旧 2008-06-24, 00:38   #5
watcher
高级会员
 
注册日期: 2008-04-02
年龄: 47
帖子: 175
声望力: 21
watcher 正向着好的方向发展
默认

文件名: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);
验证计算结果
watcher 当前离线   回复时引用此帖
旧 2008-06-24, 01:27   #6
fgabertb
普通会员
 
注册日期: 2008-03-25
年龄: 40
帖子: 58
声望力: 19
fgabertb 正向着好的方向发展
默认

引用:
作者: fanxing39 查看帖子
竟然是个 隐函数,并且还是个复变函数的 :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:
fgabertb 当前离线   回复时引用此帖
旧 2008-06-24, 03:46   #7
OKboy
初级会员
 
注册日期: 2008-06-23
年龄: 41
帖子: 7
声望力: 0
OKboy 正向着好的方向发展
默认

:biggrin:
引用:
作者: watcher 查看帖子
文件名: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:
OKboy 当前离线   回复时引用此帖
旧 2008-06-24, 03:55   #8
OKboy
初级会员
 
注册日期: 2008-06-23
年龄: 41
帖子: 7
声望力: 0
OKboy 正向着好的方向发展
默认

引用:
作者: watcher 查看帖子
文件名: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,并加上标题
OKboy 当前离线   回复时引用此帖
旧 2008-06-24, 16:12   #9
OKboy
初级会员
 
注册日期: 2008-06-23
年龄: 41
帖子: 7
声望力: 0
OKboy 正向着好的方向发展
默认

自己解决了,例如可以用以下实现:
x=0i/50i;
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:
OKboy 当前离线   回复时引用此帖
旧 2008-06-24, 22:03   #10
watcher
高级会员
 
注册日期: 2008-04-02
年龄: 47
帖子: 175
声望力: 21
watcher 正向着好的方向发展
默认

引用:
作者: fgabertb 查看帖子
請使用 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:
不错的方法,不过不区分实部、虚部?
watcher 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
【求助】求教解非线性方程参数传递问题 czy515 MATLAB论坛 2 2008-09-09 08:40
[资料]周期信号的傅里叶级数实验代码!!! zdJack0305 MATLAB论坛 2 2008-08-05 10:53
[求助]急求网格编码量化TCQ的程序! bswlzx MATLAB论坛 0 2008-06-04 20:51
跪求牛人指点一个关于矩阵的问题 berrylolo MATLAB论坛 1 2008-05-27 21:01
请问这个方程可以用MATLAB解没有? thb296 MATLAB论坛 6 2008-04-28 19:02


所有时间均为北京时间。现在的时间是 14:42


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.