QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22859|回复: 12
打印 上一主题 下一主题

[分享]插值软件langrang

[复制链接]
字体大小: 正常 放大
ilikenba 实名认证       

1万

主题

49

听众

2万

积分

  • TA的每日心情
    奋斗
    2024-6-23 05:14
  • 签到天数: 1043 天

    [LV.10]以坛为家III

    社区QQ达人 新人进步奖 优秀斑竹奖 发帖功臣

    群组: 万里江山

    群组: sas讨论小组

    群组: 长盛证券理财有限公司

    群组: C 语言讨论组

    群组: Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2005-3-20 11:55 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    软件名称:EXCEL自定义插值函数插值计算数值计算' [) a* g# T5 ]! o- X! D. Q) r: J# @ 版本号: 04y09m28 9 L4 p0 _$ Z1 e7 Y. b% [( Z1 ]分类: 工程设计应用, z. Z/ M4 {1 D. \3 G! G2 z 性质: 免费软件 % E% \. F6 P$ T" ^& k. L; w% p" x# E使用说明:

    , p4 E7 E; e% V2 z! c; y+ R

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: 2 \2 W6 M4 K- | ) X0 ~" i+ u- |5 O7 Q' n, x; x 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    # |0 S2 X3 f( C+ j

    2) 由专业编程语言编制的工程计算应用程序人机界面不友好,常常需要复杂的输入前、输出后处理。

    / g; p7 T8 P, F; |8 i

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。: _, L) F' B- @# c+ F6 m+ G # Q' I& ~" z3 L; h5 s# ^0 `0 k2 ]2 A 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。8 v/ B' m+ i0 e) k% @7 w 单曲线lagrange插值函数:double twlq(double x,char* filename);3 x" V, f* V% k E double twlx(double q,char* filename); ' _5 d* i( u6 Q: a! X0 ]8 @0 p8 M0 Q" ]曲线组lagrange插值函数:5 p/ S/ L# |; a double thlq(double x,double y,char* filename);+ ^# E; ^: R+ { double thlx(double y,double q,char* filename);& j8 m! T* }' H6 S0 e/ H; S double thly(double x,double q,char* filename);。

    : [) e" l; F: E: d( Z& X* i0 i

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:5 x: q+ m" k/ ^" q @ Description @ ) X# }( K0 m, F6 M( j) e( r" q n, nsel; ! J/ N: h* @9 j; ex[0],x[1], x[2],··, x[n-2],x[n-1];" z6 T& g8 ]3 v9 T2 c4 e& i q[0],q[1], q[2],··, q[n-2],q[n-1]; 8 K, [1 E( F0 r0 Q$ MMinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    + U" q5 x9 y' |* c

    注解:& b% j1 A& R# L6 h' Z Description:用户自定义描述字符串(Description中不可有@符号);! O* ?* {$ `! s/ j! o1 S/ @+ O n: 总插值点个数; ' f6 ?% `% e& P nsel:实际参与插值计算的插值点个数; & `2 N' t2 [6 b5 D0 i+ D1 F q MinX=0.7,MaxX=0.9 取值范围;) W7 z1 K' ]- g# y @6 w6 | OverRangeAlm=1 越限报警 1:报, 0:不报; * A, w1 L/ C I* h% x X=电压,XUnit=mv,变量名称,单位。

    % R# V1 ?2 K3 R; Y

    ****结论: 0 ^; B: E$ W7 U2 E. @8 s3 {% K8 D l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 F1 H4 U' P( j4 v( w( c 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 T1 l) Q; E8 v8 U& H1 s% o J 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 - T( S9 h, k: v3 k" D 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    / _* o; @6 `2 H' B3 r2 a, R2 r y

    附含壁温计算,强度计算,热电偶/阻,水阻力,烟气阻力,蒸汽性质等现成数据。

    2 s u" |/ i" g$ o7 n) n' R: e8 x

    [分享]插值软件langrang.zip

    419.84 KB, 下载次数: 85, 下载积分: 体力 -2 点

    [分享]插值软件langrang

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持1 反对反对0 微信微信
    ww991616        

    0

    主题

    3

    听众

    17

    积分

    升级  12.63%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    ft12345 实名认证       

    0

    主题

    0

    听众

    13

    积分

    升级  8.42%

    该用户从未签到

    自我介绍
    200 字节以内

    不支持自定义 Discuz! 代码
    回复

    使用道具 举报

    0

    主题

    3

    听众

    14

    积分

    升级  9.47%

    该用户从未签到

    自我介绍
    爱打羽毛球的程序员

    1. 9 A) M\" r* n$ N& M
    2. /* TODO: Lagrange interpolating
      , B5 c. [5 L' ~
    3. *5 j* D% }5 l* x. y: q0 g3 j
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?' H2 Q) F7 W+ M# }. J) _1 t; u
    5. * In this situation, it could be solved via lagrange interpolating
      4 }4 A$ p$ G* Y) N0 Z
    6. *
      0 f1 {0 A# g5 W
    7. * */% ~( A- {, ~, C

    8. 8 ]\" K; A# |# ?
    9. #include <stdio.h>6 c. S, Z; T0 o9 P\" b) H4 o
    10. #include <stdlib.h>! |/ {4 Z3 s1 G1 Q2 I
    11. #include <string.h>$ }# h6 V( A8 t9 N( G, A
    12. 8 I. [& G0 k* r2 p) c5 _' l
    13. #define DEBUG 0& A  M( e% N% H! N: J* [/ |' K$ b
    14. 7 K, h' l1 L+ e, n; @, R# K
    15. static float m_p = 0.5635;- ~: O* L# E' @7 ^! s
    16. static char *m_xi = NULL;8 i' }1 P0 H6 t
    17. static char *m_yi = NULL;: V$ x$ g; t5 w
    18. static float m_arr[] = {};
      2 N% J( e  h3 _2 N6 G: f, K3 p
    19. static unsigned int m_n = 0;/ r% x; Z: }1 \) m8 R9 d$ p- B% ?
    20.   K& L( D- g4 A% D$ `! }' Y
    21. static void m_lagrange_interpolating_usage();3 A\" i' x; W# w2 R- M
    22. static int m_lagrange_interpolating_set_n_arr();: ?; o! W/ S  n. j4 A: L6 }- X
    23. static float m_lagrange_interpolating();
        F( O! T% U, U) Q5 o$ n

    24. , y3 |) M9 k( E* Z
    25. static void
      ) s# D$ B0 c: m
    26. m_lagrange_interpolating_usage() \" M& W/ |& U$ i2 ]; i
    27. {4 p7 i8 K' E; C2 k\" Y
    28.   printf("Lagrange Interpolating Usage:\n");
      \" @) R' Z) G\" J5 @  J
    29.   printf("bin/li -p ** -x ** -y **\n");' U1 s5 ]* ?* M& G8 N
    30.   printf("-p 0.5635\n");
      ) X& A! S# D  h$ ^: d
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      + Q8 Q2 Y/ C$ k* M5 t  |
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      + m4 V; i# R7 w) @2 Y. Q+ q! {
    33. }+ p2 n, V) q7 b7 q( v0 l7 i& O
    34. * }  [& b1 h5 r9 a/ k7 ~, e- |
    35. static int $ |( s5 D# Z. O5 @* n$ }
    36. m_lagrange_interpolating_set_n_arr()
      4 \' ]# s9 m$ ^3 _/ x& R
    37. {
      5 w9 S) R6 N1 x: K& o2 s4 }. s) ?) n
    38.   int xi_n = 0;
      : X\" f$ Y; x/ o; Q; f3 T& j6 O
    39.   int yi_n = 0;
      % k6 H. t\" ~\" A6 z) W  F6 y\" h
    40.   int n = 0;' `1 }3 y  I8 @\" y* {
    41.   char *token = NULL;- M4 ]. K7 R, a  K4 i3 q9 i
    42.   const char *delim = ",";
      ! O9 d. m% c: ~* G

    43. $ A1 I+ {- n' {7 q  z. }* M
    44.   token = strtok(m_xi, delim);
      * u% g& E( ^( {: N, J8 W, Q( r
    45.   while (token)/ x1 n* ]\" Q' t  m9 s6 S+ Z6 r8 S5 v
    46.   {
      * y/ P\" T  z9 X: T5 t2 w! f
    47.     xi_n++;
      * A( t6 i4 r/ ~. J# \# }3 c
    48.     n++;
      : H( a2 y2 h! d; e+ l$ |
    49.     m_arr[n] = (float) atof(token);
        G* X) M\" A4 \
    50.     token = strtok(NULL, delim);5 A/ I$ Z# V- _# Z+ R0 A. |
    51.   }
      7 N6 L4 U$ {9 v2 u9 V/ _' c

    52.   z8 I% M5 H' G( v% |3 S7 `, T
    53.   token = strtok(m_yi, delim);, W$ Q( }. ~$ B' I2 j$ M7 J
    54.   while (token)
      / v3 i: V, K# q; h
    55.   {
        z) m  Z/ J' L) D
    56.     yi_n++;
      ; |+ B7 A; q2 E( z% \
    57.     n++;# S. b' f1 K+ n3 R, Y0 P
    58.     m_arr[n] = (float) atof(token);
      # C8 @$ r+ h& a
    59.     token = strtok(NULL, delim);
      # P! a, `! U* x4 H\" L9 x
    60.   }/ y0 v& v9 R& @; |  i& ]/ e
    61.   
      4 K  ]. O& m. M3 g+ D7 P' v! P
    62.   if (xi_n != yi_n)
      ; e7 V1 i* m! b/ p+ A
    63.   {4 i  l' q5 [$ x( H# O7 e9 H
    64.     return 0;. Q) O; X* I) {( a: n& \
    65.   }( g' t3 Z5 e& E+ Y

    66. ! G! ~* S# Y3 H
    67.   m_n = xi_n = yi_n;
      ' X# \, ?- J6 R7 }. @

    68. : C9 s: B2 c! I; R
    69.   return 1;4 i8 N# Q  U0 T( t' y  T
    70. }
      % a\" f& b$ q0 o4 L. c2 Q- K3 g
    71. % b) Q- {: m, O& a, h3 d
    72. static float
        w  r# m5 X9 s
    73. m_lagrange_interpolating()
      1 Z0 i+ _6 R+ ]6 M! _& {$ ]
    74. {/ O) e0 Q7 T\" a3 h) F4 u
    75.   float l = 0.00000;
      ' }- D# l9 k0 e, [' n4 }% o5 Q& h
    76.   float li;
      + {( {  W% U; [( d* r6 y8 X
    77.   int i;
      4 Y) [- n/ f5 x: m: M
    78.   int j;' b( @' ?/ d\" Q; W- n5 L  p2 x3 L
    79. , x) R! m/ }& X  D) i8 q
    80. #if DEBUG\" X+ {% V4 b0 [
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      . Y$ R8 _* T0 p& d' h
    82.   unsigned int m_n = 3;  u# `  x1 o' [( c% s  F
    83.   float m_p = 0.5635;7 ]  @5 m% R/ I' H1 n
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      # h$ n: Z+ n/ J7 [0 H& m9 u5 L
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      ; G. w+ \. k+ X/ x6 y
    86.   0 t+ ~3 d7 K% W% f5 @2 m
    87.   for (i = 0; i < m_n; i++)
      3 H7 Q7 r/ a4 h; E5 F
    88.   {2 q4 z7 [0 ~3 |1 c
    89.     li = 1.0000000;
      5 M\" Y6 K8 F5 g# a& n+ A' V
    90.     for (j = 0; j < m_n; j++)6 O: ~9 z0 t0 ]# E5 m
    91.     {
      7 |7 b1 n7 D2 _8 y
    92.       if (j != i)* h( ?* O8 a7 F  T) r) Y6 y0 K
    93.       {- i4 _: b/ y1 ]! G1 q
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      \" C1 a( J% H4 T
    95.       }' N1 O: K) j1 Q% E) s
    96.     }
      ' t: |/ F. j. _, V, n2 O* V( m
    97.     l = l + li * m_y[i];4 _8 C5 j% N. @% Y% q/ N/ o
    98.   }- p/ k& i3 E0 _; }0 G' T) `
    99. #else
      0 r5 Y3 ]: Z. m+ n; x: B+ O\" }' ]
    100.   if (!m_lagrange_interpolating_set_n_arr())
      3 S6 Y4 x2 n% P2 Q
    101.   {7 D7 Z! L. f& c9 S
    102.     printf("Error: xi and yi counter is diff\n");
      + }0 |; ^: o) x' h
    103.     4 A& \' A\" L9 ^, j6 L
    104.     return 0;
      4 _% ?5 }- B1 {1 l2 C
    105.   }# w3 L\" ~! u0 x
    106. ! c\" u. W5 w4 s, W% Z! q5 u
    107.   for (i = 0; i < m_n; i++) - I- p7 ^0 P& g
    108.   {
      ! l% G3 Q' N, K& i$ y
    109.     li = 1.0000000;
      . {9 K) B/ K( P0 Y! n
    110.     for (j = 0; j < m_n; j++)
      8 V$ c2 B2 B) R3 m
    111.     {. |' h0 D7 G, x6 s# R% N
    112.       if (j != i) 3 ~* _- t. V6 k
    113.       {
      ; V* N. }7 T' Y( p2 f' n
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      ( |5 Y) H* ^\" S! m/ r
    115.       }: }5 R0 i  p& }4 @\" V
    116.     }2 B6 Y3 x1 J- N$ Q\" }' O
    117.     l = l + li * m_arr[i + m_n + 1];
      6 V\" Y5 w- O; Z  I5 v\" Q
    118.   }. E& d) {, }8 V! s
    119. #endif' o8 ^* B3 |% G' Q: I
    120. , c/ q4 z$ T\" k; J  j- o4 }! d
    121.   return l;
      % I0 l8 G0 O( z# m, J4 V6 w
    122. }6 M3 ?1 F# B+ X8 a. l; G7 v

    123. , V6 B/ v0 r' T, _
    124. int
      ! f) i# Z. c+ E. Z$ T' r2 n
    125. main(int argc, char **argv)
      9 e8 @, K) l' T0 m6 V& M
    126. {
      6 Z7 h1 o% ~% t3 A1 ~' X
    127.   int c;
      5 E1 ]: p6 m( X; ]
    128.   extern char *optarg;0 V- n- i. w5 }$ q1 m  B\" }
    129.   float res;) Y' K\" @$ W8 ~( U1 P

    130. * A0 ^7 F' ^- j! P. V* Y
    131.   if (argc < 2)
      $ u. I/ ~% K4 y( K. w! N# @& [3 M
    132.   {
      : y! |% p' N9 G- A2 ?
    133.     m_lagrange_interpolating_usage();
      - R  Q0 M1 c. m* g
    134.    
      \" V8 @8 f4 a\" {3 O6 ^1 O$ x- V
    135.     return -1;
      : W- V- H$ J4 I5 k0 a+ D0 C# Z
    136.   }! L\" T: S, {/ e) Y
    137. . \) Z0 ?3 \! J
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) 9 E3 i8 k6 [0 J* k
    139.   {
      6 I3 I, Z/ g9 P/ K0 l
    140.     switch (c) 2 l8 e6 ~5 a4 u
    141.     {/ g/ u; r1 N2 \/ S
    142.       case 'p':% b1 V) W/ V; A2 o3 a' `
    143.               m_p = (float) atof(optarg);% z# d& v+ }: ^+ i  H\" O
    144.       case 'x':
      1 c- F6 d2 |5 |- Q; B& I& t
    145.         m_xi = optarg;! v9 C) `& q& k0 w9 ?
    146.         break;6 p* z\" X- x1 i: d; }
    147.       case 'y':! j$ k7 _\" K: ]\" _, Z+ H# _1 I
    148.         m_yi = optarg;
      ( @+ s: F& H/ a3 I. T
    149.         break;
      * q$ q1 `7 X1 E- ^
    150.     }, a2 ^  b# v0 ^4 }# K  i. N
    151.   }7 k& h7 s( K) v* G- E
    152. 0 l\" V8 S- x: C& i
    153.   res = m_lagrange_interpolating();
      % \! F8 j2 P$ G5 ]  S* P. C
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);2 A2 k% V/ u3 h
    155.   
      3 N, f+ ]) a6 y& k: q\" }
    156.   return 0;7 ?8 @6 x1 C* H/ ~) i
    157. }
      7 q4 v0 T* o! V9 g, H- y
    复制代码
    回复

    使用道具 举报

    lll111 实名认证       

    0

    主题

    0

    听众

    1

    积分

    升级  20%

    该用户从未签到

    回复

    使用道具 举报

    xhz-hhu        

    0

    主题

    0

    听众

    2

    积分

    升级  40%

    该用户从未签到

    回复

    使用道具 举报

    depht858        

    0

    主题

    0

    听众

    2

    积分

    升级  40%

    该用户从未签到

    回复

    使用道具 举报

    hastykeys        

    0

    主题

    0

    听众

    4

    积分

    升级  80%

    该用户从未签到

    回复

    使用道具 举报

    芸芸芸        

    0

    主题

    0

    听众

    2

    积分

    升级  40%

    该用户从未签到

    回复

    使用道具 举报

    mao233        

    0

    主题

    0

    听众

    1

    积分

    升级  20%

    该用户从未签到

    自我介绍
    好好学习
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    fastpost qq
    收缩
    • 电话咨询

    • 04714969085

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-11-1 12:38 , Processed in 0.233167 second(s), 104 queries .

    回顶部