
问题补充,因字数限制,挪到这
1拉格朗日插值简介:
对给定的n个插值节点x1,x2,…,xn,及其对应的函数值y1=f(x1), y2=f(x2),…, yn=f(xn);使用拉格朗日插值公式,计算在x点处的对应的函数值f(x);
2一维拉格朗日插值c语言程序:
Int lagrange(x0, y0, n, x, y)
Float xo[], yo[], x;
Int n;
Float y
{
Int i, j;
Float p;
y=0;
If (n>1)
{
For(i=0;i<n;i++)
{
P=1;
For(j=1;j<n;j++)
{
If(i!=J)
P=p(x-x0[j]/x0[i]-x0[j]);
}
y=y+py0[i];
Return(0);
}
Else
Return(-1);
}
3例题。已知函数如下表所示,求x=0472处的函数值:
X 046 047 048 049
Y 0484655 04903745 0502750 0511668
计算这个问题的c语言程序如下:
#minclude stdio
#includeM<nathh>
Main()
{
Float x0[4]={ 046, 047,048,049};
Float y0[4]={ 0484655 ,04903745 ,0502750 ,0511668};
Float x, y;
Int n, rtn;
N=4;
X=0472;
Rth=lagrange(x0,y0,n,x,&y);
If(rtn=0)
{
Prinf(“Y(0472)=:%f\n”,y);
}
Else
{
Prinf(“n must be larger than 1\n”);
}
}
计算结果:Y(0472)=:0495553
4问题补充
我的问题与上面的例子类似,计算三维空间一点(x,y,z)对应的函数值(Vx,Vy,Vz)不同的是自变量(point_coordinatetxt)为三维空间散乱点(不是正方体的顶点),因变量(point_datatxt)为矢量(向量 )。插值算法比较多,常数法,拉格朗日插值,埃特金插值,三阶样条插值等。最简单的就是常数法,查找离目标点(x,y,z)距离最近的已知自变量(Xi,Yi,Zi),把该点的函数值赋给目标点做函数值,求高手帮忙写写。
使用Lagrange 插值多项式的方法:
首先把下面的代码复制到M文件中,保存成lagran
function [C,L]=lagran(X,Y)
% input - X is a vector that contains a list of abscissas
% - Y is a vector that contains a list of ordinates
% output - C is a matrix that contains the coefficients of the lagrange interpolatory polynomial
%- L is a matrix that contains the lagrange coefficients polynomial
w=length(X);
n=w-1;
L=zeros(w,w);
for k=1:n+1
V=1;
for j=1:n+1
if k~=j
V=conv(V,poly(X(j)))/(X(k)-X(j));
end
end
L(k,:)=V;
end
C=YL;
然后在命令窗口中输入以下内容:
x=[0 025 05 075 1];
y=[0 03104 06177 07886 1];
lagran(x,y)
ans =
33088 -63851 33164 07599 0
得到的数据就是多项式各项的系数,注意最后一个是常数项,即x^0,
所以表达式为:f=33088x^4-63851x^3+33164x^2 +07599x
求面积就是积分求解
>> f=@(x)33088x^4-63851x^3+33164x^2 +07599x;
>> quad(f,0,1)
ans =
05509
这些点肯定是通过这个多项式的!
这个可以调用我的函数[x,y]=crosspt(x1,y1,x2,y2)
这里x1,y1,x2,y2分别是两条曲线的横纵坐标值。得到的x,y分别是交点坐标。
你的例子:
clear; clc;n1=150; % core refractive index
n2=148; % clading refractive index
a1=415; % core radius=415microm
a2=625; % cladding radius=625microm
nama=155; % imput wavelength=155microm
pfcri=sqrt(n1^2-n2^2);
V1=2pi/nama;
V=V1a1pfcri;
ncoeff=(n2:0001:n1)';
b=(ncoeff^2-n2^2)/(pfcri^2);
x=Vsqrt(1-b);
x1=Vsqrt(b);
y_0=besselj(0,x); %零阶
y_1=besselj(1,x); %一阶
y_01=besselk(0,x1); %零阶
y_11=besselk(1,x1); %一阶
yl=xy_0/y_1;
yr=x1y_01/y_11;
axis([n2,n1,-50,50]);
plot(ncoeff,yl,'r',ncoeff,yr,'b');grid on;
xlabel('core effective refractive index');
% 寻找数值上的交点
[x,y]=crosspt(ncoeff,yl,ncoeff,yr);
text(x,y,'o','HorizontalAlignment','center','color','k')
text(x,y,[' ','(',num2str(x),',',num2str(y),')'],'color','k')
最后得到的结果:
当然也可以求出多个交点,下面给出我的例子:
clcclear
x=0:001:5pi;
y1=8sin(x);
y2=6cos(x);
plot(x,y1,'r--',x,y2,'b-')
[xx,yy]=crosspt(x,y1,x,y2);
for i=1:length(xx)
text(xx(i),yy(i),'o','HorizontalAlignment','center','color','k')
text(xx(i),yy(i),[' ','(',num2str(xx(i)),',',num2str(yy(i)),')'],'color','k')
end
五个点都求出来了。
记住把我的crossptp文件放在你的当前文件夹里面
分类: 休闲/爱好 >> 摄影摄像
问题描述:
为什么有很多摄相头的介绍写着210W象素(插值)、130W象素(插值)什么的,谁能解释一下插值的含义?
解析:
插值”最初是电脑的术语,后来引用到数码图像上来。图像放大时,像素也相应地增加,但这些增加的像素从何而来?“插值”程序会自动选择信息较好的像素作为增加的像素,而并非只使用临近的像素,所以在放大图像时,图像看上去会比较平滑、干净――但必须注意的是插值并不能增加图像信息。例如:一张照片中,人因为距离比较远,在照片上只有一个白点,但当图像插值放大时,这个人还是白点,只是比以前稍微大了些。
在市场上我们所常见的摄像头像素一般都是30万或者35万像素的,而有的商家往往会说自己的产品可以达到插值120万 像素,这又是怎么一回事呢?其实,这些摄像头是使用了软件插值算出来的,简单的说就是将640X480的拉大到1024X7 68,然后再利用软件计算分辨率点之间的色彩区别,把中间拉大的部分填入软件计算的颜色。这样做虽然输出的大了,但是图 像的质量并没有真正的提高,甚至还有可能严重失真。
接着你的代码往下写:
[x1,y1]=meshgrid(-2:01:2);
z1 = interp2(x,y,Z,x1,y1);
figure;
surf(x1,y1,z1);
用拉格朗日插值做y=1/(1+x^2);本来就有很大的偏差,你的插值函数没写错
这是我做过的一个y=1/(1+25x^2)的图像 ,这里取得是11点,你的应该是5点的吧。你的做完是这种么。这样没错,插值法不适合太多点,想做多点的用的是分段插值。你应该是在学计算方法的课程吧,后边就会讲的。
以上就是关于高分悬赏 求三维数据点C语言插值计算程序全部的内容,包括:高分悬赏 求三维数据点C语言插值计算程序、求一段matlab插值程序、请问如何在下面的Matlab程序中做插值处理,得到图中红线和蓝线交点位置的坐标呢 请熟悉的Matlab高手指点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)