| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 602 人关注过本帖
标题:请教一个插值问题
只看楼主 加入收藏
Audrey1919
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-11-16
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:4 
请教一个插值问题
一本书中的例子,我想借用,可是编译出来总是出错,错误是error C2664: 'slgq' : cannot convert parameter 3 from 'double [11][11]' to 'double []',请高手给我指点。
#include "math.h"
#include "stdio.h"

main()
{
    extern double slgq(double x[],double y[],double z[],int n,int m,double u,double v);
    int i,j;
    double u,v,w;
    static double x[11],y[11],z[11][11];
    for (i=0;i<=10;i++)
    {
        x[i]=0.1*i;y[i]=x[i];
    }
    for(i=0;i<=10;i++)
        for(j=0;j<=10;j++)
            z[i][j]=exp(-(x[i]-y[j]));
        printf("\n");
        u=0.35;v=0.65;
        w=slgq(x,y,z,11,11,u,v);
        printf("x=%7.3f,  y=%7.3f,  z(x,y)=%e\n",u,v,w);
        printf("\n");
}

double slgq(double x[],double y[],double z[],int n,int m,double u,double v)
{
    int ip,ipp,i,j,l,iq,iqq,k;
    double h,w,b[10];
    if (u<=x[0]) {ip=1;ipp=4;}
    else if(u>=x[n-1]) {ip=n-3;ipp=n;}
    else
    {
        i=l;j=n;
        while (((i-j)!=1)&&((i-j)!=-1))
        {
            l=(i+j)/2;
            if (u<x[l-1]) j=1;
            else i=l;
        }
        ip=i-3;ipp=i+4;
    }
    if (ip<1) ip=1;
    if (ipp>n) ipp=n;
    if (v<=y[0]) {iq=1;iqq=m;}
    else  if (v>=y[m-1]) {iq=m-3;iqq=m;}
    else
    {
        i=l;j=m;
        while (((i-j)!=1)&&((i-j)!=-1))
        {
            l=(i+j)/2;
            if (v<y[l-1]) j=1;
            else i=1;
        }
        iq=i-3;iqq=i+4;
    }
    if(iq<1) iq=1;
    if(iqq>m) iqq=m;
    for(i=ip-1;i<=ipp-1;i++)
    {
        b[i-ip+1]=0.0;
        for(j=iq-1;j=iqq-1;j++)
        {
            h=z[m*i+j];
            for (k=iq-1;k<=iqq-1;k++)
                if(k!=j) h=h*(v-y[k])/(y[j]-y[k]);
                b[i-ip+1]=b[i-ip+1]+h;
        }
    }
    w=0.0;
    for(i=ip-1;i<=ipp-1;i++)
    {
        h=b[i-ip+1];
        for (j=ip-1;j<=ipp-1;j++)
            if (j!=1) h=h*(u-x[j])/(x[i]-x[j]);
            w=w+h;
    }
    return(w);
}
搜索更多相关主题的帖子: 插值 
2009-12-21 13:39
sidooh
Rank: 4
等 级:业余侠客
帖 子:121
专家分:265
注 册:2009-6-26
收藏
得分:20 
extern double slgq(double x[],double y[],double z[],int n,int m,double u,double v);
改为
extern double slgq(double *,double *,double (*)[11],int,int,double,double);
原来的函数声明有点麻烦

函数定义这一行
double slgq(double x[],double y[],double z[],int n,int m,double u,double v)
改为
double slgq(double x[],double y[],double (*z)[11],int n,int m,double u,double v)

在slgq()函数里
 h=z[m*i+j];
这一行是什么意思,你传进来的z是个二维数组,z[m*i+j]是一个地址,当然会有错误
2009-12-21 14:13
jack2106
Rank: 2
等 级:论坛游民
帖 子:89
专家分:19
注 册:2009-3-7
收藏
得分:0 
写点注释好不?
没有注释再好的代码也不能称之为代码。

比梦想更伟大的是实现梦想的行动力!
2009-12-21 15:43
here12345
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-5-12
收藏
得分:0 
w=slgq(x,y,z,11,11,u,v);  这里传递z是二维数组名,形参也应该是二维的
2009-12-21 16:21
Audrey1919
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-11-16
收藏
得分:0 
谢谢各位了,按照sidooh的方法问题已解决。
2009-12-21 19:35
快速回复:请教一个插值问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012465 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved