编写B样条基函数程序时遇到问题
正在编写拟合非均匀有理B样条曲线的程序,编写B样条基函数的时候遇到了大问题,基函数中出现了无穷大,以下是我写的程序,请高手帮忙修改一下,注:用三点来拟合function o=op1()
syms x0 y0 x1 y1 x2 y2 alph0 alphx u ux j N;
x(1)=input('x0=');
y(1)=input('y0=');
x(2)=input('x1=');
y(2)=input('y1=');
x(3)=input('x2=');
y(3)=input('y2=');
alphx(1)=0;
j=0;
%总共生成两个alphx(2),alphx(3)
for i=2:1:3
alphx(i)=alphx(i-1)+sqrt((x(i)-x(i-1))^2+(y(i)-y(i-1))^2);
end
%生成各个u
for i=1:1:9
if i<=4
u(i)=alphx(1);
else if i<=5
u(i)=alphx(i-3);
else u(i)=alphx(3);
end
end
end
%以下编制基函数程序
for i=1:1:3
%求零次和一次
N(i,1)=1;
N(i,2)=(ux-u(i))/(u(i+1)-u(i))+(u(i+1+1)-ux)/(u(i+1+1)-u(i+1));
%预求N(i+1,2)
N(i+1,2)=(ux-u(i+1))/(u(i+1+1)-u(i+1))+(u(i+1+1+1)-ux)/(u(i+1+1+1)-u(i+1+1));
%求二次用到了N(i+1,2),所以以上要出现
N(i,3)=(ux-u(i))*N(i,2)/(u(i+2)-u(i))+(u(i+2+1)-ux)*N(i+1,2);
%预求N(i+1+1,2)
N(i+1+1,2)=(ux-u(i+1+1))/(u(i+1+1+1)-u(i+1+1))+(u(i+1+1+1+1)-ux)/(u(i+1+1+1+1)-u(i+1+1+1));
%预求N(i+1,3),用到了N(i+1,2),N(i+1+1,2),所以以上要出现
N(i+1,3)=(ux-u(i+1))*N(i+1,2)/(u(i+1+2)-u(i+1))+(u(i+1+2+1)-ux)*N(i+1+1,2)/(u(i+1+2+1)-u(i+1+1));
%求三次用到了N(i+1,3),所以以上要出现
N(i,4)=(ux-u(i))*N(i,3)/(u(i+3)-u(i))+(u(i+3+1)-ux)*N(i+1,3);
end
N
[ 本帖最后由 eight 于 2007-11-5 22:37 编辑 ] 不知你现在解决了这个问题没有,希望能共同讨论
页:
[1]