91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 7KB
    文件類型: .c
    金幣: 1
    下載: 2 次
    發布日期: 2021-05-16
  • 語言: C/C++
  • 標簽: 樣條算法??

資源簡介

三次樣條插值算法c語言,找了好長時間,還是有點問題

資源截圖

代碼片段和文件信息

三次樣條插值2008年12月20日?星期六?19:44MATLAB的樣條插值函數默認的設置,是一種稱為?not-a-knot?的邊界條件

not-a-knot(非扭結)邊界條件,也就是強制使第一個點的三次導數和第二點的三次導數一樣;最后一個點的三次導數和倒數第一個點一樣。

費了半天的勁,自己寫出了spline函數,具備與MATLAB一樣的數值精度!

/**************************
**?三次樣條插值函數.C
**?進行自然邊界,
**?????夾持邊界,
**?????非扭結邊界
**?條件下的插值
**?2008-12-27?slx?保留所有權利
**************************/
#include?
#include?

typedef?enum?_condition
{
????NATURAL
????CLAMPED
????NOTaKNOT
}condition;

typedef?struct?_coefficient
{
????double?a3;
????double?b2;
????double?c1;
????double?d0;
}coefficient;

typedef?struct?_point
{
????coefficient?*coe;
????double?*xCoordinate;
????double?*yCoordinate;
????double?f0;
????double?fn;
????int?num;
????condition?con;
}point;


int?spline(point?*point)
{
????double?*x?=?(*point).xCoordinate?*y?=?(*point).yCoordinate;
????int?n?=?(*point).num?-?1;
????coefficient?*coe?=?(*point).coe;
????condition?con?=?(*point).con;
????double?*h?*d;
???double?*a?*b?*c?*f?*m;
????double?temp;
????int?i;
????h?=?(double?*)malloc(?n?*?sizeof(double)?);?/*?01--(n-1)n?*/
????d?=?(double?*)malloc(?n?*?sizeof(double)?);?/*?01--(n-1)n?*/
????
????a?=?(double?*)malloc(?(n?+?1)?*?sizeof(double)?);?/*?特別使用1--(n-1)???????n?*/
????b?=?(double?*)malloc(?(n?+?1)?*?sizeof(double)?);?/*????????01--(n-1)???????n?*/
????c?=?(double?*)malloc(?(n?+?1)?*?sizeof(double)?);?/*????????01--(n-1)特別使用?*/
????f?=?(double?*)malloc(?(n?+?1)?*?sizeof(double)?);?/*????????01--(n-1)???????n?*/
????m?=?b;
????if(f?==?NULL)
????{
????????free(h);
????????free(d);
????????free(a);
????????free(b);
????????free(c);
????????return?1;
????}
????/*?計算?h[]?d[]?*/
????for?(i?=?0;?i?????{
????????h[i]?=?x[i?+?1]?-?x[i];
????????d[i]?=?(y[i?+?1]?-?y[i])?/?h[i];
????????/*?printf(“%f\t%f\n“?h[i]?d[i]);?*/
????}
????/**********************
????**?初始化系數增廣矩陣
????**********************/
????a[0]?=?(*point).f0;
????c[n]?=?(*point).fn;
????/*?計算?a[]?b[]?d[]?f[]?*/
????switch(con)
????{
????????case?NATURAL:
????????????f[0]?=?a[0];
????????????f[n]?=?c[n];
????????????a[0]?=?0;
????????????c[n]?=?0;
????????????c[0]?=?0;
????????????a[n]?=?0;
????????????b[0]?=?1;
????????????b[n]?=?1;
????????break;
????????
????????case?CLAMPED:
????????????f[0]?=?6?*?(d[0]?-?a[0]);
????????????f[n]?=?6?*?(c[n]?-?d[n?-?1]);
????????????a[0]?=?0;
????????????c[n]?=?0;
????????????c[0]?=?h[0];
????????????a[n]?=?h[n?-?1];
????????????b[0]?=?2?*?h[0];
????????????b[n]?=?2?*?h[n?-?1];
????????break;
????????
????????case?NOTaKNOT:
????????????f[0]?=?0;
????????????f[n]?=?0;
????????????a[0]?=?h[0];
????????????c[n]?=?h[n?-?1];
????????????c[0]?=?-(h[0]?+?h[1]);
????????????a[n]?=?-(h[n?-?2]?+?h[n?-?1]);
????????????b[0]?=?h[1];
????????????b[n]?=?h[n?-?2];
????????break;
????}

????for?(i?=?1;?i?????{
????????a[i]?=?h[i?-?1];
????????b[i]?=?2?*?(h[i?-?1]?+?h[i]);
????????c[i]?=?h[i];
????????f[i]?

評論

共有 條評論

相關資源