matlab 函数递归变量问题
答案:2 悬赏:50 手机版
解决时间 2021-12-31 16:26
- 提问者网友:世勋超人
- 2021-12-30 22:12
这是一个用matlab编写legendre(勒让德)多项式的问题,已知P0(x)=1,P1(x)=x,又有递推公式:(n+1)Pn+1(x)=(2n+1)xPn(x)-nPn-1(x),求出Pn(n=1,2,3,….)
最佳答案
- 五星知识达人网友:一把行者刀
- 2021-12-30 22:37
%legendre
syms x
n=5; %只算到5,也可以根据需要变化。
p0=1;
p(1)=x;
p(2)=1/2*((2*1+1)*x*p(1)-1*p0);%这个最容易让人想不到
for n=2:n %
p(n+1)=1/(n+1)*((2*n+1)*x*p(n)-n*p(n-1));
end
p=simplify(p)
%p=[p0,simplify(p)]
运行结果:
p =
[ x, 3/2*x^2-1/2, 5/2*x^3-3/2*x, 35/8*x^4-15/4*x^2+3/8, 63/8*x^5-35/4*x^3+15/8*x, 231/16*x^6-315/16*x^4+105/16*x^2-5/16]
syms x
n=5; %只算到5,也可以根据需要变化。
p0=1;
p(1)=x;
p(2)=1/2*((2*1+1)*x*p(1)-1*p0);%这个最容易让人想不到
for n=2:n %
p(n+1)=1/(n+1)*((2*n+1)*x*p(n)-n*p(n-1));
end
p=simplify(p)
%p=[p0,simplify(p)]
运行结果:
p =
[ x, 3/2*x^2-1/2, 5/2*x^3-3/2*x, 35/8*x^4-15/4*x^2+3/8, 63/8*x^5-35/4*x^3+15/8*x, 231/16*x^6-315/16*x^4+105/16*x^2-5/16]
全部回答
- 1楼网友:玩家
- 2021-12-30 22:44
首先 你的n没有传进去。所以会直接跳到len=1,返回的结果就是1
其次 如果n的值传入tt函数的话,会形成无限递归调用。因为进入递规的时候,n的值一直为3,所以一直满足n>0。无法退出递归。
第三 不知道你的x,y 有什么用处。。。
我改了一下tt函数,你试试看是不是会出现4
function len = tt(x,y,n)
if n>0
n = n -1;
len = tt(x,y,n) + 1;
else
len = 1;
end
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯