24小时热门版块排行榜    

CyRhmU.jpeg
查看: 907  |  回复: 4

东山

木虫 (正式写手)


[交流] 探讨多维插值程序的编写——自己编写一个,希望能讨论一下更好的

根据n,pi值来求G//感觉计算有些繁琐,希望讨论更简洁有效的方式
n[14]={};//14个初值, 由小到大
G[14][17]={};//14*17数组,每行由小到大
pi[14][17]{};//14*17数组,每行由大到小
//n的14个值对应G,pi的14行

if(nc>n[13])//输入值nc>n[13],则产生新的对应nc的HnewG[17]和Hnewpi[17];然后对应输入pai求输出Gc
        {
                for(j=0;j<=16;j++)
                {
                        HnewG[j]=G[12][j]*(n[13]-nc)/(n[13]-n[12])+G[13][j]*(nc-n[12])/(n[13]-n[12]);
                        Hnewpi[j]=pi[12][j]*(n[13]-nc)/(n[13]-n[12])+pi[13][j]*(nc-n[12])/(n[13]-n[12]);
                }
                if(pai                 {
                        return(HnewG[16]);
                }
                if(pai>Hnewpi[0])
                {
                        return(HnewG[0]);
                }
                for(j=0;j<=16;j++)
                {
                        if(pai==Hnewpi[j])
                        {
                                Gc=HnewG[j];
                                return(Gc);
                        }
                        else if((paiHnewpi[j+1]))
                        {
                                Gc=HnewG[j]*(Hnewpi[j+1]-pai)/(Hnewpi[j+1]-Hnewpi[j])+HnewG[j+1]*(pai-Hnewpi[j])/(Hnewpi[j+1]-Hnewpi[j]);
                                return(Gc);
                        }
                        else
                                continue;
                }
        }
        else if(nc         {
                for(j=0;j<=16;j++)
                {
                        LnewG[j]=G[1][j]*(n[0]-nc)/(n[0]-n[1])+G[0][j]*(nc-n[1])/(n[0]-n[1]);
                        Lnewpi[j]=pi[0][j]*(n[1]-nc)/(n[1]-n[0])+pi[1][j]*(nc-n[0])/(n[1]-n[0]);
                }
                if(pai                 {
                        return(LnewG[20]);
                }
                if(pai>Lnewpi[0])
                {
                        return(LnewG[0]);
                }
                for(j=0;j<=16;j++)
                {
                        if(pai==Lnewpi[j])
                        {
                                Gc=LnewG[j];
                                return(Gc);
                        }
                        else if((paiLnewpi[j+1]))
                        {
                                Gc=LnewG[j]*(Lnewpi[j+1]-pai)/(Lnewpi[j+1]-Lnewpi[j])+LnewG[j+1]*(pai-Lnewpi[j])/(Lnewpi[j+1]-Lnewpi[j]);
                                return(Gc);
                        }
                        else
                                continue;
                }
        }
        else if(nc==n[0])//判定最小值以便于下面的计算
        {
                if(pai                 {
                        return(G[0][16]);
                }
                if(pai>pi[0][0])
                {
                        return(G[0][0]);
                }
                for(j=0;j<=16;j++)       
                {
                        if(pai==pi[0][j])
                        {
                                Gc=G[0][j];
                                return(Gc);
                        }
                        else if((paipi[0][j+1]))
                        {
                                Gc=G[0][j]*(pi[0][j+1]-pai)/(pi[0][j+1]-pi[0][j])+G[0][j+1]*(pai-pi[0][j])/(pi[0][j+1]-pi[0][j]);
                                return(Gc);
                        }
                        else
                                continue;
                }
        }
        else//判定输入nc的范围,求解对应nc的pi[17],再根据输入pai求输出Gc;其中求解过程在是从n[14]的每相邻两值判定nc并按上面步骤求解
        {
                for(i=1;i<=13;i++)
                {     
                        if(nc==n)
                        {
                                if(pai[16])
                                {
                                        return(G[16]);
                                }
                                if(pai>pi[0])
                                {
                                        return(G[0]);
                                }
                                for(j=0;j<=16;j++)       
                                {
                                        if(pai==pi[j])
                                        {
                                                Gc=G[j];
                                                return(Gc);
                                        }
                                        else if((pai[j])&&(pai>pi[j+1]))
                                        {
                                                Gc=G[j]*(pi[j+1]-pai)/(pi[j+1]-pi[j])+G[j+1]*(pai-pi[j])/(pi[j+1]-pi[j]);
                                                return(Gc);
                                        }
                                        else
                                                continue;
                                }
                        }
            else if((nc)&&(nc>n[i-1]))
                        {
                                 for(j=0;j<=16;j++)
                                {
                                        newG[j]=G[i-1][j]*(n-nc)/(n-n[i-1])+G[j]*(nc-n[i-1])/(n-n[i-1]);
                                        newpi[j]=pi[i-1][j]*(n-nc)/(n-n[i-1])+pi[j]*(nc-n[i-1])/(n-n[i-1]);
                                }
                                if(pai                                 {
                                        return(newG[16]);
                                }
                                if(pai>newpi[0])
                                {
                                        return(newG[0]);
                                }
                                for(j=0;j<=16;j++)
                                {
                                        if(pai==newpi[j])
                                        {
                                                Gc=newG[j];
                                                return(Gc);
                                        }
                                        else if((painewpi[j+1]))
                                        {
                                                Gc=newG[j]*(newpi[j+1]-pai)/(newpi[j+1]-newpi[j])+newG[j+1]*(pai-newpi[j])/(newpi[j+1]-newpi[j]);
                                                return(Gc);
                                        }
                                        else
                                                continue;
                                }
                        }
                        else
                                continue;
                }
        }
}
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   关注TA 给TA发消息 送TA红花 TA的回帖

edisondanny

金虫 (小有名气)



小木虫: 金币+0.5, 给个红包,谢谢回帖
只要达到目的了,我觉得就可以了。bug没有了就行
2楼2012-12-07 13:08:58
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

wangxn06

金虫 (正式写手)


这是什么插值啊
3楼2012-12-08 09:33:53
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

东山

木虫 (正式写手)


引用回帖:
3楼: Originally posted by wangxn06 at 2012-12-08 09:33:53
这是什么插值啊

n[14]有14个值,对应G[14][17]和pi[14][17]的14行,根据n的范围得出用哪一行来进行插值,比如,nc=n[9],就用G[9]来求n[9]
4楼2012-12-21 08:27:59
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
11jxli15楼
2012-12-23 09:45  
相关版块跳转 我要订阅楼主 东山 的主题更新
信息提示
请填处理意见