Numerical Analysis---Hermite Interpolation
2014-05-07 05:55
344 查看
这两天都在准备考试,没怎么动弹。
昨天把数值分析的take-home做了,第一个编程题就是Hermite Interpolation.
Hermite Interpolation需要几组点以及他们的一阶导数值,因此hermite interpolation在区间内都是连续的,这个性质很好~。例题中其结果与原函数的plot基本重合。
(x = [-1 -1 -1/2 -1/2 0 0 1/2 1/2 1 1]';
f = @(x) 1 ./ (1 + x.^2);)
先上图感受一下~
码渣分别用loop和vector来写,原本以为vectorize之后能更快,没想到却慢了一倍的时间。。。希望大神赐教。
%%%%%%%%%用vector的%%%%%%%%%%%
tic
N = 10;
x = [-1 -1 -1/2 -1/2 0 0 1/2 1/2 1 1]';
f = @(x) 1 ./ (1 + x.^2);
df = @(x) -(2*x)./(x.^2 + 1).^2;
%initialize first three columns
triangle = zeros(N, N + 1);
triangle(:,1) = x;
triangle(:,2) = f(x);
triangle(1:2:N-1, 3) = df(x(1:2:N-1));
triangle(2:2:N-2, 3) = (triangle(3:2:N-1,2) - triangle(2:2:N-2,2)) ./ ...
(x(4:2:N) - x(2:2:N-2));
%calculate the rest of the triangle
for i = 1 : N-2
triangle(1:N-1-i,i+3) = (triangle(2:N-i,i+2) - triangle(1:N-1-i,i+2))./...
(x(i+2:N) - x(1:N-i-1));
end
x_ = linspace(-1, 1, 100);
coeff = triangle(1, 2:N+1);
x_val = ones(100, N);
y_val = zeros(1,100);
%calculat 100 more points at the interval
for inx = 1 : 100
for k = 2 : N
x_val(inx,k) = x_val(inx,k - 1) * (x_(inx) - triangle(k-1,1));
end
end
y = x_val * coeff';
hold on
p1 = plot(x_, f(x_),'-b','LineWidth',3);
p2 = plot(x_, y, '.y');
legend('f(x)','H(x)');
toc
%%%%%%%%%%%用loop的%%%%%%%%%%%%%%
N = 10;
x = [-1 -1 -1/2 -1/2 0 0 1/2 1/2 1 1]';
f = 1 ./ (1 + x.^2);
df = -(2*x)./(x.^2 + 1).^2;
grid = zeros(N, N+1);
grid(:,1) = x;
grid(:,2) = f;
for i = 1 : 2 : N-1
grid(i,3) = df(i);
end
for i = 2 : 2 : N-2
grid(i,3) = (grid(i+1,2) - grid(i,2)) / (x(i+1) - x(i));
end
for i = 1 : N-2
for j = 1 : N-1-i
grid(j,i+3) = (grid(j+1,i+2) - grid(j,i+2)) / (x(j+i+1) - x(j));
end
end
grid
figure
hold on
x_ = linspace(-1, 1, 100);
df = -(2*x_)./(x_.^2 + 1).^2;
f = 1 ./ (1 + x_.^2);
plot(x_, f)
y = grid(1,2) * ones(1,100);
temp = 1;
for inx = 1 : 100
for i = 3 : N+1
for j = 1 : i - 2
temp = temp * (x_(inx) - grid(j,1));
end
temp = temp * grid(1,i);
y(inx) = y(inx) + temp;
temp = 1;
end
end
plot(x_, y, '*r');
这学期Numerical Analysis算是最challenging的课了,准备暑假再好好总结一下,再用html5把这些算法图像化玩玩,希望自己不会食言~
开始复习。。。
昨天把数值分析的take-home做了,第一个编程题就是Hermite Interpolation.
Hermite Interpolation需要几组点以及他们的一阶导数值,因此hermite interpolation在区间内都是连续的,这个性质很好~。例题中其结果与原函数的plot基本重合。
(x = [-1 -1 -1/2 -1/2 0 0 1/2 1/2 1 1]';
f = @(x) 1 ./ (1 + x.^2);)
先上图感受一下~
码渣分别用loop和vector来写,原本以为vectorize之后能更快,没想到却慢了一倍的时间。。。希望大神赐教。
%%%%%%%%%用vector的%%%%%%%%%%%
tic
N = 10;
x = [-1 -1 -1/2 -1/2 0 0 1/2 1/2 1 1]';
f = @(x) 1 ./ (1 + x.^2);
df = @(x) -(2*x)./(x.^2 + 1).^2;
%initialize first three columns
triangle = zeros(N, N + 1);
triangle(:,1) = x;
triangle(:,2) = f(x);
triangle(1:2:N-1, 3) = df(x(1:2:N-1));
triangle(2:2:N-2, 3) = (triangle(3:2:N-1,2) - triangle(2:2:N-2,2)) ./ ...
(x(4:2:N) - x(2:2:N-2));
%calculate the rest of the triangle
for i = 1 : N-2
triangle(1:N-1-i,i+3) = (triangle(2:N-i,i+2) - triangle(1:N-1-i,i+2))./...
(x(i+2:N) - x(1:N-i-1));
end
x_ = linspace(-1, 1, 100);
coeff = triangle(1, 2:N+1);
x_val = ones(100, N);
y_val = zeros(1,100);
%calculat 100 more points at the interval
for inx = 1 : 100
for k = 2 : N
x_val(inx,k) = x_val(inx,k - 1) * (x_(inx) - triangle(k-1,1));
end
end
y = x_val * coeff';
hold on
p1 = plot(x_, f(x_),'-b','LineWidth',3);
p2 = plot(x_, y, '.y');
legend('f(x)','H(x)');
toc
%%%%%%%%%%%用loop的%%%%%%%%%%%%%%
N = 10;
x = [-1 -1 -1/2 -1/2 0 0 1/2 1/2 1 1]';
f = 1 ./ (1 + x.^2);
df = -(2*x)./(x.^2 + 1).^2;
grid = zeros(N, N+1);
grid(:,1) = x;
grid(:,2) = f;
for i = 1 : 2 : N-1
grid(i,3) = df(i);
end
for i = 2 : 2 : N-2
grid(i,3) = (grid(i+1,2) - grid(i,2)) / (x(i+1) - x(i));
end
for i = 1 : N-2
for j = 1 : N-1-i
grid(j,i+3) = (grid(j+1,i+2) - grid(j,i+2)) / (x(j+i+1) - x(j));
end
end
grid
figure
hold on
x_ = linspace(-1, 1, 100);
df = -(2*x_)./(x_.^2 + 1).^2;
f = 1 ./ (1 + x_.^2);
plot(x_, f)
y = grid(1,2) * ones(1,100);
temp = 1;
for inx = 1 : 100
for i = 3 : N+1
for j = 1 : i - 2
temp = temp * (x_(inx) - grid(j,1));
end
temp = temp * grid(1,i);
y(inx) = y(inx) + temp;
temp = 1;
end
end
plot(x_, y, '*r');
这学期Numerical Analysis算是最challenging的课了,准备暑假再好好总结一下,再用html5把这些算法图像化玩玩,希望自己不会食言~
开始复习。。。
相关文章推荐
- 条形码扫描枪数据读取的问题
- 「cocos2d-x」瓦片地图学习(1)(2)
- 虚拟机网卡桥接到无线网卡上 无法上网解决方法
- memcached命令
- lunux命令笔记
- SQL SERVER: 给用户增加执行存储过程的权限
- linux配置服务器笔记
- DELPHI中的消息处理机制(三种消息处理方法的比较,如何截断消息)
- Java7版本: switch语句支持String、Enum类型(JDK1.5)与原来byte、short、char和int.
- shell学习笔记___1
- 5_Shell语言―――文本处理命令之wc、tr、cut、join、sort和uniq
- 【LeetCode OJ】Triangle
- 来玩Play框架04 表单
- cocos2d+TexturePackerGUI动画制作
- LAMP架构之NFS
- 使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录
- python file.tell() 在windows下需要注意的地方
- ibatis 入门
- python IOError: [Errno 0] Error
- [python]deteval中groundtruth.xml内容重新排序