| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 347 人关注过本帖
标题:【求指教】拉格朗日插值
只看楼主 加入收藏
我是来注册的
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-3-11
收藏
 问题点数:0 回复次数:7 
【求指教】拉格朗日插值
下面是我用C语言编的拉格朗日插值程序,请问各位同仁,红色部分标记的这种间断循环有没有简单一点的处理方式,另外,刚编程序不久,麻烦评价一下,程序有哪些地方可以改进的。感谢哦!

#include<stdio.h>
#include <stdlib.h>
#include<math.h>
void main()
{
    int i,k,n;
    float a,*x,*y,*l1,*l2,*l,p=0;
    printf("*******  拉格朗日插值程序  *******\n\n\n");
    printf("请输入已知点的个数:");
    scanf("%d",&n);
    x=(float *)malloc(sizeof(float)*n);y=(float *)malloc(sizeof(float)*n);l1=(float *)malloc(sizeof(float)*n);l2=(float *)malloc(sizeof(float)*n);l=(float *)malloc(sizeof(float)*n);
    printf("\n请输入已知点的坐标值,横纵坐标用英文状态下的【逗号】隔开,点与点之间用【空格】隔开:\n");
    for(i=0;i<n;i++)
        scanf("%f,%f",&x[i],&y[i]);
    printf("\n请输入待计算点的横坐标x=");
    scanf("%f",&a);
    for(k=0;k<n;k++)
        {
            l1[k]=l2[k]=1;
            for(i=0;i<k;i++)
                {
                    l1[k]=l1[k]*(a-x[i]);
                    l2[k]=l2[k]*(x[k]-x[i]);
                }
            for(i=k+1;i<n;i++)
                {
                    l1[k]=l1[k]*(a-x[i]);
                    l2[k]=l2[k]*(x[k]-x[i]);
                }
            l[k]=l1[k]/l2[k];
        }
    for(i=0;i<n;i++)
        p=p+l[i]*y[i];
    n=n-1;
    printf("\np%d(%f)=%f即插值点坐标为(%f,%f)\n\n\n",n,a,p,a,p);
    free(x);free(y);free(l1);free(l2);free(l);
    system("pause");
}

[ 本帖最后由 我是来注册的 于 2012-3-30 10:47 编辑 ]
搜索更多相关主题的帖子: include C语言 
2012-03-30 10:45
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
麻烦你下次等你的代码能编译通过再发上来问逻辑上的问题。

还有麻烦你下次加点分给帮你的朋友。

重剑无锋,大巧不工
2012-03-30 10:48
C_596322153
Rank: 6Rank: 6
来 自:徽州
等 级:侠之大者
帖 子:182
专家分:466
注 册:2012-1-10
收藏
得分:0 
嘿嘿  
2012-03-30 11:07
我是来注册的
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-3-11
收藏
得分:0 
回复 2楼 beyondyf
?我编译运行没问题啊。
2012-03-30 12:47
我是来注册的
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-3-11
收藏
得分:0 
回复 2楼 beyondyf
还有,现在还能修改加分吗?
2012-03-30 12:47
我是来注册的
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-3-11
收藏
得分:0 
都没人回复。。。
2012-03-31 12:49
姚杰
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:169
专家分:477
注 册:2010-6-1
收藏
得分:0 
这个问题可以用递归写,没必要写这么麻烦的

持之以恒,别留遗憾,加油
2012-03-31 13:34
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
收藏
得分:0 
#include<stdio.h>
#define maxsize 100
int main(void)
{
    double x[maxsize],y[maxsize],aa,sum,p,a,b;
    int i,k,n;

    printf("please input a and b:\n");
    scanf("%lf %lf",&a,&b);

    printf("please input aa=\n");
    scanf("%lf",&aa);

    printf("please input n=\n");
    scanf("%d",&n);

    printf("please input x[k]=\n");
    for(k=0;k<=n;k++)
    {
        printf("x[%d]=",k);
        scanf("%lf",&x[k]);
    }

    printf("please input y[k]=\n");
    for(k=0;k<=n;k++)
    {
        printf("y[%d]=",k);
        scanf("%lf",&y[k]);
    }

    if(x[0]<a&&x[n]>b)
    {
        printf("输入错误,请重新输入!");
        return 0;
    }
    sum=0;               
    for(k=0;k<=n;k++)
    {
        p=1;
        for(i=0;i<=n;i++)
        
            if(i!=k)
            
                p=p*(aa-x[i])/(x[k]-x[i]);
                    sum+=p*y[k];
            
        
    }
    printf("sum=%lf\n",sum);
    return 0;
}


菜鸟也疯狂
2012-11-13 16:19
快速回复:【求指教】拉格朗日插值
数据加载中...
 
   



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

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