northwood77 发表于 2006-11-14 14:31

这个超越方程怎么解决?

有一个超越方程,我希望用matlab解出,求哪位给个方案。
k*tan(a)=tan(k*a)
其中,a从pi/12,pi/11,pi/10...一直变化到pi/3,求解相应的k值。

xjzuo 发表于 2006-11-14 15:04

回复

这个问题只要作一个循环,用 fzero 就可以求解.

northwood77 发表于 2006-11-15 00:11

但是fzero的语法是 X = FZERO(FUN,X0)
其中x0表示寻找x0附件的根。这个要猜测呀,麻烦高手把m文件做出来看看哈。




回复

这个问题只要作一个循环,用 fzero 就可以求解.

xjzuo 发表于 2006-11-15 09:52

回复

给定求解区间,k向量即给定;
初值可以这样选取:
内循环求解时,每次以k(n)为初值,这样就可以依次求出给定区间上的所有根。

northwood77 发表于 2006-11-16 20:00

求救,高手帮我调调这个程序吧

就是为了求解上面的问题,我编了一下程序,但是总出错,请高手指导一下!
主程序:ii=0;
for i=12:-1:3
    ii=ii+1;
    a=pi/i;
    j=0;
    k=fzero(tzero,j);
    while k==0
    j=j+1;
    k=fzero(tzero,j);
    end
kk(ii)=k;
end
子函数:function tzero(k,a)
y=k*tan(a)-tan(k*a);
出错信息:??? Error using ==> tzero
Too many output arguments.

Error in ==> C:\MATLAB6p5\work\main.m
On line 6==>   k=fzero(tzero,j);

xjzuo 发表于 2006-11-16 23:47

回复

你犯了一个低级错误:   "function tzero(k,a)" 应改为 "function y=tzero(k,a)".
另:再重复一遍"给定求解区间,k向量即给定;初值可以这样选取:内循环求解时,每次以k(n)为初值,这样就可以依次求出给定区间上的所有根。"

[ 本帖最后由 xjzuo 于 2006-11-16 23:52 编辑 ]

happy 发表于 2006-11-17 09:04

原帖由 northwood77 于 2006-11-15 00:11 发表
但是fzero的语法是 X = FZERO(FUN,X0)
其中x0表示寻找x0附件的根。这个要猜测呀,麻烦高手把m文件做出来看看哈。




回复

这个问题只要作一个循环,用 fzero 就可以求解.


你用x = fzero(fun,x0,options,P1,P2,...)格式调用吧
其中P1等是用户自定义的传递变量

在这里你就可以用来传递a
页: [1]
查看完整版本: 这个超越方程怎么解决?