QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22153|回复: 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自定义插值函数插值计算数值计算 7 E3 x5 n8 b" [2 _; q& ] u: o版本号: 04y09m28 - j& v; u+ v6 G) h: ^分类: 工程设计应用 ' H. |, N; G. L) _* f性质: 免费软件 ) g% |& x2 C- J) k# q使用说明:

    & i8 L W" h; A

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: 9 ~' G+ U6 @6 G+ H! k* V6 L 6 t( |) ^. X0 ` 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    % c# O2 G* }: l) D# B

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

    ; S* c" m3 S U

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 $ G" U+ {, h& W$ T! t! B ! i5 @' T0 p, W* B. W 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。3 C' M! {# z$ O% e0 y0 k* n 单曲线lagrange插值函数:double twlq(double x,char* filename); + J7 B" u1 I( S$ D double twlx(double q,char* filename); A6 S* l& q4 Q3 n6 s5 M 曲线组lagrange插值函数:9 w$ _7 G* A, e7 K0 X double thlq(double x,double y,char* filename);6 v1 Q8 p3 t" ]8 f) }8 A" E double thlx(double y,double q,char* filename); 4 h' q$ s2 K h1 i! _1 y- b1 J6 d double thly(double x,double q,char* filename);。

    0 n& K( M& P- e$ ]- z2 o, l

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:! r# Q5 i$ u; ^4 P @ Description @1 f* H0 f, X1 D/ y: X1 j n, nsel; , z: W6 f: \) J2 R3 r4 O. ~; ?x[0],x[1], x[2],··, x[n-2],x[n-1];6 z/ z# W0 M8 q q[0],q[1], q[2],··, q[n-2],q[n-1]; 9 H6 ]+ o' W% U# DMinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    : b( \+ n# E8 g7 a8 ^

    注解:" d( O; q# C+ R5 p Description:用户自定义描述字符串(Description中不可有@符号); 6 d- p% V; J& A# a1 [! y; O5 E! E n: 总插值点个数;# C+ k. u6 J2 { nsel:实际参与插值计算的插值点个数; ! c' p7 n6 L" P7 G6 K MinX=0.7,MaxX=0.9 取值范围; , K2 N: |9 y6 H! L5 ]1 [4 m OverRangeAlm=1 越限报警 1:报, 0:不报; - a& Q% G, A- \; `" ^) H X=电压,XUnit=mv,变量名称,单位。

    7 p `7 n) E8 U

    ****结论:: R9 _& _# F2 G5 x l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 ( K, C6 g( A& F2 b3 z- _ 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 3 S1 W# V& }( {) Y$ p 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。$ i' S* l" q5 R" q8 i* i, `+ l 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    1 S ? Z( Z% K4 W! ?

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

    & y7 d% l# c( `& S

    [分享]插值软件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. * X; A4 g# K6 s2 P' F0 P
    2. /* TODO: Lagrange interpolating ' b$ I& L8 D; @
    3. *4 g% _# j5 F, D4 q& s6 h! X
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?7 V\" |0 c) e+ }( C\" {
    5. * In this situation, it could be solved via lagrange interpolating$ }; N( {$ }) t1 t$ i2 _3 l  L$ n: Q- Y
    6. *8 o2 N6 U4 H9 T; ~( i! W
    7. * */. a' k; ^' m0 U' Y, X9 X. ~
    8. 9 v8 }7 r1 b( h  B; Y7 O
    9. #include <stdio.h>& a+ Z9 n/ ^' L, {) {) A/ o0 Q+ U- j
    10. #include <stdlib.h>7 C& v% c8 H/ C; Q
    11. #include <string.h>
      & d: E, D; N( ^7 }/ b/ ^& t

    12.   E7 S1 ^# w' C' l
    13. #define DEBUG 0
      $ ?2 B/ N0 ?, r- b4 H3 m
    14. ! B# H7 Q* j! l# i
    15. static float m_p = 0.5635;  C5 ~% p% u2 n- l
    16. static char *m_xi = NULL;6 q( R+ B3 d/ M: t3 d
    17. static char *m_yi = NULL;
      2 Z( ?0 b\" c) }+ k, ^# P# v
    18. static float m_arr[] = {};
      5 B# u8 @3 b6 z. e) y
    19. static unsigned int m_n = 0;2 ~5 U3 `( v+ O  [+ n

    20. / \, m. q( g  U0 `' _! P
    21. static void m_lagrange_interpolating_usage();
      \" M  A7 q# e% ]4 O& a
    22. static int m_lagrange_interpolating_set_n_arr();  ~* B5 }7 V2 y* ?3 ]3 b
    23. static float m_lagrange_interpolating();
      * A/ K8 v8 l! A, d
    24. $ M2 L, d$ F; y$ i. f! q
    25. static void ) e, _% I: {9 g& G% l/ a5 d
    26. m_lagrange_interpolating_usage()
      . w) f* G\" V+ t# r' t7 z
    27. {
      9 e4 n- I) W5 d1 K
    28.   printf("Lagrange Interpolating Usage:\n");6 O+ K4 n  B3 Q' A% q2 \
    29.   printf("bin/li -p ** -x ** -y **\n");
      8 ]7 p1 X3 ~1 u1 H\" U& [
    30.   printf("-p 0.5635\n");$ @8 M& O. V$ P! L1 a5 u
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");+ m1 }+ w. W9 u5 c! P3 _
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
        `9 t- p* }8 u\" F  Q
    33. }
      + F; U2 ]# _& E
    34. \" b1 X$ T# P) T5 y: C8 w: n
    35. static int
      3 l* M0 ]3 ~6 C! `$ f! Q- X
    36. m_lagrange_interpolating_set_n_arr() ' {' ?\" r5 j% y+ P: _  E
    37. {
      8 c- f) L5 n8 b# s\" v
    38.   int xi_n = 0;
      . B/ W. O4 ~* _
    39.   int yi_n = 0;, d\" ^2 l- u) k0 ]7 Z8 t
    40.   int n = 0;% k$ z. a1 J' j0 y
    41.   char *token = NULL;  _$ f2 b; p* q$ B
    42.   const char *delim = ",";
      ) N; k& h) {1 M$ w  }
    43. + W) f. J$ q8 b
    44.   token = strtok(m_xi, delim);4 {; D% [1 m* M0 g
    45.   while (token)# j+ J$ B& I& }7 P# w1 s$ o
    46.   {
      6 ~/ W. {* J( `% G
    47.     xi_n++;
      4 @5 p5 p$ E9 T
    48.     n++;3 @0 t! E1 q7 K% x
    49.     m_arr[n] = (float) atof(token);
      ( T5 H4 z. ^! s4 n$ p$ V
    50.     token = strtok(NULL, delim);( k1 u1 k& Q$ A5 L2 w+ S! ^
    51.   }
      % E; o5 N$ b% a' a& @+ I& U' m
    52.   N+ i; z. Y- h5 \
    53.   token = strtok(m_yi, delim);
      7 k( ^7 ^3 P% m6 m\" j: B4 [* `
    54.   while (token)
      ' X& v\" [6 K6 D6 `# N8 a
    55.   {
      , O% c7 Q3 t; `\" k8 C\" O8 o
    56.     yi_n++;0 q- z2 X# f* m! Q2 z
    57.     n++;
      * s9 C7 K! c' P6 _  K- l4 K/ m! M2 G
    58.     m_arr[n] = (float) atof(token);8 v$ E) w' q$ f+ g- a
    59.     token = strtok(NULL, delim);
      ; M1 E: P* Z. N
    60.   }
      2 W3 E  @0 g% `
    61.   
      . D* |6 R' x\" r. ]0 z
    62.   if (xi_n != yi_n)
      / Q% K  C7 w! @8 p; R
    63.   {6 a# V8 Z5 T6 I' S
    64.     return 0;
      3 n& j- k9 f3 k6 }$ V* a
    65.   }8 I* ?- D4 O  l& d, ^+ |3 `, R: z% ~

    66. % X% M\" L1 G; I, E. ]
    67.   m_n = xi_n = yi_n;( g. j9 T9 T6 t2 u\" u# n& f/ \

    68. , K  E+ S5 [0 c: q# Y4 m: ~* S3 @6 g3 F3 N
    69.   return 1;
      ; d4 G0 @  z9 x1 ~
    70. }* r& ?% v. B\" z

    71. 3 z- Q+ m) J1 g; l
    72. static float ' A! J1 G0 W( b1 @
    73. m_lagrange_interpolating() ! t, _+ w\" |% t( G! S9 b3 Q$ j\" H
    74. {
      1 j0 j; u# `$ f0 h- x4 U' n
    75.   float l = 0.00000;  E$ H/ U+ {) x: [4 o* i) T
    76.   float li;
      4 c1 |- f% G  v3 F# q% `5 E6 h; e6 n
    77.   int i;
      ) O. G5 h0 ^9 X8 u* R6 a, r
    78.   int j;
      ! @/ Q# k% b9 m  K6 y. g
    79. ) c8 U6 g! a+ @
    80. #if DEBUG7 ?& z( P3 d# m. Z( R
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      ) l. g( v. t4 x9 m/ T. ]) j
    82.   unsigned int m_n = 3;; I: B& c3 i$ i$ D: i) a
    83.   float m_p = 0.5635;1 m$ m! F5 r: t) o
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      / g! \) I5 K! I  r
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      0 \  a5 c& K; O2 g# {, t$ Y
    86.   
      $ A5 {  b7 V& F+ {: t$ L: r
    87.   for (i = 0; i < m_n; i++)1 q5 D+ C8 @+ C+ ~' [% o
    88.   {
      7 J2 t& S) }! {' G* V4 `8 W6 \, Y2 P
    89.     li = 1.0000000;
      ( p$ ?, F1 X' O/ J9 w9 f. H6 p6 t
    90.     for (j = 0; j < m_n; j++)
      ; D4 `* C2 v9 [) }
    91.     {
        j6 w% c4 q6 d4 k$ \$ e& I$ e
    92.       if (j != i)/ o) v# |: D$ d! ^6 B$ Z
    93.       {* j, f( q8 u, S
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      6 v0 n( v! @5 \7 e. S
    95.       }
      3 t* X& }9 ?) ]& W- i' @
    96.     }  j) S. T* s; `# r* _! D8 D4 t
    97.     l = l + li * m_y[i];8 ?, }6 A/ o. ?4 I/ |
    98.   }4 p; _4 y0 q: J: x
    99. #else
      ' i/ N# E* I/ O
    100.   if (!m_lagrange_interpolating_set_n_arr()) ' P' E9 w! f! C% `
    101.   {8 I6 f' U7 P$ x6 k
    102.     printf("Error: xi and yi counter is diff\n");) q, X& k\" q/ h0 R6 b* l
    103.     9 P- n! D  m( W8 }& O7 n  w# d
    104.     return 0;
        G& V, M% D! L
    105.   }+ I5 e9 J* x, A0 A; B
    106. % k2 L3 U3 \+ O. Z
    107.   for (i = 0; i < m_n; i++) # [6 T$ [5 k, V- k9 ^
    108.   {
      3 p3 @% \5 c- W5 s- }- Q
    109.     li = 1.0000000;  \, o: h* V+ ^8 ]9 `. o
    110.     for (j = 0; j < m_n; j++)
      . j; f9 p9 v3 p0 w
    111.     {
      , A7 N- {. Q  k9 g7 ?& C4 b& Q
    112.       if (j != i)
      / O/ n3 E5 |! k
    113.       {
      ; j6 j  P% b! h# z
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);, d8 m+ a\" t/ r3 x# c* X/ n\" p7 a
    115.       }& ^4 p* R4 Y; y: y; O, S& q* ~7 F
    116.     }
      % h$ w4 F# F0 Y1 F0 t
    117.     l = l + li * m_arr[i + m_n + 1];
      . f/ q\" N7 }  w0 y3 {5 t% \8 B, ?# t
    118.   }\" _* a' [9 c0 Z, u
    119. #endif
      8 n( P3 q2 B# }$ w
    120. 2 c. P. a\" l$ o& d8 F+ o3 N. b( U
    121.   return l;
      \" A; s$ A' |( }! E2 F+ O! R1 ^
    122. }4 a9 \( u. J- E7 d4 {* m  N3 v7 I

    123. 7 o: ~7 I& N/ c5 _* l6 ?! ^) E
    124. int ' N* W' S. X\" W
    125. main(int argc, char **argv) $ Z3 ?; r2 w3 F, x6 d2 \
    126. {\" P1 d- V' e  e8 p! g6 Y
    127.   int c;2 e  }8 D0 t/ c; X
    128.   extern char *optarg;0 B0 w8 Z$ Q& M2 u# N
    129.   float res;
      ( j% w: @* K) |6 Z- N# y% B/ q
    130. 0 i; R$ }; d0 [# _
    131.   if (argc < 2) 5 w' i, h# }- E& G
    132.   {8 W) @  S0 C0 A- A
    133.     m_lagrange_interpolating_usage();5 H' M; O' G; X* F
    134.    
      4 P5 ?- z# N/ v5 v' x, l# r7 c
    135.     return -1;6 k3 F; T/ v* T3 \+ f$ [
    136.   }; h. g1 Q  J. L4 N
    137. 1 _% x. k% K& y2 O5 h1 P5 @
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) , G% F/ C9 `( _1 P+ B' X
    139.   {
      . p( v+ t6 c# g) W8 O: m& E
    140.     switch (c) ( v, y7 O' n0 x4 N9 |: {( S
    141.     {. ~3 m: w  ^# N6 Z$ A
    142.       case 'p':
      7 ?5 O+ F& j9 z: l
    143.               m_p = (float) atof(optarg);
      . K: g) w6 q8 `9 b  m; ^! }9 S
    144.       case 'x':
      ) {) g2 j0 |7 l
    145.         m_xi = optarg;
      . ]\" D. V( P: u
    146.         break;\" p7 f0 A; S; y7 F  m! r! h1 Q: d
    147.       case 'y':
      8 q5 S- {2 c- F- t' B
    148.         m_yi = optarg;
      ) z& Y: Q. b/ I1 U& F6 @; b
    149.         break;# [5 s, s% Z; x% g- h+ t  ]
    150.     }$ F0 r- ?# U0 j! h
    151.   }5 \5 K% R1 K/ F  H, q+ _+ W5 @& o; G
    152. 9 f# Z5 ~6 h7 i0 U6 ^7 y' J3 s7 V
    153.   res = m_lagrange_interpolating();7 D% y' B9 d: U- W6 ]- o
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      5 d  l8 x, c4 \
    155.   : Y5 ~5 S8 E, B( ]1 C
    156.   return 0;3 Z. S! t0 \, g: `4 b/ i
    157. }
      9 `- N! S0 P, b+ l2 k8 ]8 B& i
    复制代码
    回复

    使用道具 举报

    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%

    该用户从未签到

    自我介绍
    好好学习
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-11 18:32 , Processed in 0.459366 second(s), 105 queries .

    回顶部