QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22155|回复: 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自定义插值函数插值计算数值计算 ! m, |' B# t% e6 i: K版本号: 04y09m28 , |# ?2 p8 v3 O0 A; v" e5 \分类: 工程设计应用 - f' B& Q7 _8 J5 b" o/ d性质: 免费软件 : e" o$ c" r: [) U7 T0 T U) |使用说明:

    / b( j7 C8 L/ v* P9 [/ b

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:; t1 U2 {: [$ H8 k : b1 r! x [- p* [1 g 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    % J! ?. a" w/ Q2 u0 w5 e4 A0 ~: @

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

    1 U( c( {* e0 w2 y" P

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。( r3 P: {" U% Z7 Y+ ~ 9 `/ N' G9 e" \. o% v ?$ C 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 {1 P9 \: }% y! j; e$ u* l/ ?: ] 单曲线lagrange插值函数:double twlq(double x,char* filename); 8 v+ p8 I9 c" y: x! n( m6 L double twlx(double q,char* filename);* R' ^5 R, [' @$ ? 曲线组lagrange插值函数:9 n( l( _& m3 z& |& u double thlq(double x,double y,char* filename);5 |2 c2 |) f3 ]/ V& r double thlx(double y,double q,char* filename); 4 C7 R2 o f( {- m) U double thly(double x,double q,char* filename);。

    0 K: `4 i3 r+ ]2 U% y5 i. b1 }

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: 4 {4 f: B* M4 y! [8 ^@ Description @ . m5 `6 c) j8 M( w n, nsel;. |7 e+ R; G8 B! `9 z, S x[0],x[1], x[2],··, x[n-2],x[n-1]; X* o7 Q* Y6 l2 B+ v q[0],q[1], q[2],··, q[n-2],q[n-1]; % J% K2 B* h1 s* P" fMinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    / H+ h2 J' ?; D2 b1 j: }

    注解:9 B/ H' b* ^, X/ l3 M Description:用户自定义描述字符串(Description中不可有@符号); : k& ?+ a1 F8 D3 y" o: k' i n: 总插值点个数; & Z8 d% n# i/ D3 k3 T" z nsel:实际参与插值计算的插值点个数; - G+ H- V- ~& n MinX=0.7,MaxX=0.9 取值范围;2 j8 e$ B* G/ I9 t4 S' [2 [ OverRangeAlm=1 越限报警 1:报, 0:不报;2 a! A1 [/ ]' c0 D! O- T* A X=电压,XUnit=mv,变量名称,单位。

    : X8 `. z+ A& n. T9 B

    ****结论:% Z) i0 {; z" j B l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。6 d# K% Y3 C5 {; N' O 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 ( G/ T% ]0 T% }! I/ H$ S9 f 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。8 F# a3 a' E# B# e. R0 Y7 r 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    / e# h6 L7 P Q) ^. c/ U$ |

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

    % a) M) t4 C- i1 p& E2 R2 I

    [分享]插值软件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. 5 V1 n) N6 V& _* E4 @% P% M' G
    2. /* TODO: Lagrange interpolating 8 b4 }: L& v7 t4 d0 Z
    3. *2 I, q: u1 ^9 h: v1 v
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?3 A9 {; v- A; Y
    5. * In this situation, it could be solved via lagrange interpolating
      . R* q5 j/ m% Z3 g) E# X
    6. *
      ' e8 L9 d5 s\" r2 `  j1 U\" T
    7. * */
      3 l* U, Q, K1 m7 L! j
    8. ! b* v) s$ q0 Q( n6 w\" {1 U0 ~
    9. #include <stdio.h>/ k* q! n9 V# n9 w
    10. #include <stdlib.h>
      6 a  h8 y: n2 ?, p9 m0 q. k2 D
    11. #include <string.h>
      : L1 p7 P+ l+ ?6 ^; Z. x! \
    12. ' K  a4 d) l- S! Z\" k* W' C
    13. #define DEBUG 0
      ! V7 y. G, r& z) g: _
    14. ( ^( A/ b, J+ A4 [
    15. static float m_p = 0.5635;0 I) V: V+ x- i! s
    16. static char *m_xi = NULL;; k' A- o$ P\" i* A( P, k
    17. static char *m_yi = NULL;: e: k( C  h6 S& A
    18. static float m_arr[] = {};; _+ e& j! A7 K
    19. static unsigned int m_n = 0;
      9 y6 y8 |% y. w, h8 z  z) E
    20. . Q2 b4 t- }: L0 x+ P
    21. static void m_lagrange_interpolating_usage();
      7 ^$ Z. P( s; {5 `
    22. static int m_lagrange_interpolating_set_n_arr();
      # Q) y- Z; {: l
    23. static float m_lagrange_interpolating();1 g\" j$ ~/ A2 f7 N* ?9 x1 e2 U! H

    24. 5 n+ B* j, l) y' G) K\" U' |
    25. static void
      + s) t: |- K  Y# m, l6 t. h\" _3 g
    26. m_lagrange_interpolating_usage() : w4 f- A9 v' t/ R' V3 v! n
    27. {
      9 S! `% H/ `  F; x
    28.   printf("Lagrange Interpolating Usage:\n");+ p! L1 u9 v# J' z$ d5 v
    29.   printf("bin/li -p ** -x ** -y **\n");+ y8 t# Y( B: a! U6 d8 `' ~
    30.   printf("-p 0.5635\n");6 g$ ]5 w$ x; o- S6 p+ m/ a
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      6 D% c7 B+ E. @% C- L) P
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      * g\" u6 A$ ~8 ^; W: |' b
    33. }
        Q5 e  R) i8 K3 J$ P
    34. & w4 Q2 y: I9 C, B' E
    35. static int
      3 L& m) {1 n5 a/ }4 T- W
    36. m_lagrange_interpolating_set_n_arr()
      / ?, @4 t\" _% o% X* M
    37. {
      8 u% w5 Y! L$ B, D: S$ W' Z/ ^) b
    38.   int xi_n = 0;
      ! M' N- t, e4 b4 f
    39.   int yi_n = 0;
      6 |! C0 @! \0 ]9 r$ n% y
    40.   int n = 0;
      ' Q! J% ^3 n1 E2 B5 l0 y; N9 p2 J
    41.   char *token = NULL;7 p; y& J& p7 u  i. L8 I
    42.   const char *delim = ",";
      & Y% r$ e( g* m) n( o
    43. - v' r' a' ^7 y: q4 t8 f: \
    44.   token = strtok(m_xi, delim);' J: k% M, j; v& b+ ~\" A6 s- r3 d3 E
    45.   while (token)
        C- g, N. ^# @
    46.   {
      2 R( i2 p; g5 ^5 P2 @2 d
    47.     xi_n++;. w1 z! o1 ?5 u/ i
    48.     n++;
      4 l8 G$ d' S* q. \& t
    49.     m_arr[n] = (float) atof(token);4 Z# `9 k$ W: `' ?1 _9 [& n9 F$ h
    50.     token = strtok(NULL, delim);
      - k( S' G7 C( `4 Z& G
    51.   }
      1 U. r. T4 M4 b! T5 C/ y

    52. 5 I. N7 u7 U3 v, }
    53.   token = strtok(m_yi, delim);, b& M' [6 [0 @) B
    54.   while (token)! M& ~/ v, }/ g. j! ]& [
    55.   {+ `1 ~1 E) b5 s1 Q8 W$ g
    56.     yi_n++;( \, [# r: F5 J, |
    57.     n++;
      8 |$ V4 i5 a; n
    58.     m_arr[n] = (float) atof(token);! B/ C/ P! E. E$ d' a0 Q$ v  Q
    59.     token = strtok(NULL, delim);  v: j1 V9 J2 M
    60.   }
      # Y, N) P. m! [4 C
    61.   
      & `, H/ G\" t5 g- s
    62.   if (xi_n != yi_n) ( r# d5 m9 u8 }& r! H0 ~- K
    63.   {
      1 ]0 p( _/ L1 s) Q) ~. _
    64.     return 0;% t) v4 k, }* Y
    65.   }
      * _$ Z, h6 `5 B. p4 [/ c

    66. * B- a6 J' D) `6 `
    67.   m_n = xi_n = yi_n;
      9 k2 g8 h# o% F6 \/ J/ ?

    68. ' y, a& m0 n( o/ R+ g7 _. C
    69.   return 1;
      * J4 A$ F- q  X+ l$ u/ T
    70. }4 m5 R5 ^3 q9 ]

    71. ! r# f. l7 l+ K3 [! g3 w
    72. static float
      : U3 c) k4 v. Z) V/ L5 i) R\" L; ]
    73. m_lagrange_interpolating()
      : Q! r# P) J, t/ n\" Z7 L: ]
    74. {0 }( U6 V% z( q
    75.   float l = 0.00000;
      $ `+ y/ K! u\" P; f
    76.   float li;5 f2 b+ \1 s, t& E# ]% b
    77.   int i;0 c6 ?4 V, i+ s4 j6 f: i
    78.   int j;1 P$ k- ^! U0 D4 J1 G; @

    79. * i, L9 ~/ s0 z\" p- I
    80. #if DEBUG7 D& z$ T3 u& M/ W3 v  A0 h
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);8 k! X! y% a+ v, [/ m2 o% O6 q
    82.   unsigned int m_n = 3;
      / ^6 _2 N8 k, L3 ~; n% B
    83.   float m_p = 0.5635;3 ~% p% x% k. R3 P; h$ h
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
        k0 q2 K& p: ?  Q  h- h9 p
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
        L2 z' K! i. ^' s& s
    86.   
      : q+ R/ B6 W! @9 j6 w* `) X. P
    87.   for (i = 0; i < m_n; i++)! D# J1 O* O& k; q# @\" i2 I
    88.   {' V* D* b1 Y3 v% a/ o' P: A
    89.     li = 1.0000000;
      8 V4 d\" X- M/ |1 h# o. i, Y2 g2 U, T& t
    90.     for (j = 0; j < m_n; j++)' X' g\" I. O, ^
    91.     {# X' d: q* c5 p+ k+ R1 H
    92.       if (j != i)1 }& S# Z, W2 w# _& `\" |: L# J! ]
    93.       {
      1 A/ g; U# L/ P7 K5 x; q\" g+ j
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      \" V+ J% q+ E; p: _( m: S/ d$ O
    95.       }
      * ^4 H9 w; S- [8 V3 L' g
    96.     }2 }( Q  H1 K! \% P7 V
    97.     l = l + li * m_y[i];
      ! s2 q5 X& I! \: v3 n- `\" |$ m
    98.   }# s+ K& q4 W% s8 v$ C/ ?! d# t
    99. #else
      2 [, G2 O8 G) l, E/ W) k6 d
    100.   if (!m_lagrange_interpolating_set_n_arr())
      4 ~: [' `* F5 j8 @4 O
    101.   {
      . _& n0 V# ?8 m\" Y1 p
    102.     printf("Error: xi and yi counter is diff\n");
      * w% l) V$ `4 ~, v
    103.    
      5 s1 Y- B5 p\" c4 i1 J) q
    104.     return 0;
      5 H( |# z$ g- _. X$ S
    105.   }\" W2 w\" Z& x3 i, K
    106. ! U3 T/ _( l\" Z
    107.   for (i = 0; i < m_n; i++)
        Q% ^/ U( E* m: K( g
    108.   {
      # {) f* {, a/ ?/ H' ?  U) ~8 p
    109.     li = 1.0000000;: g+ J# C  O! X( G
    110.     for (j = 0; j < m_n; j++)
      # ?& R/ |4 ~* l\" G. H+ w
    111.     {
      5 n# T- h  Q! D  \
    112.       if (j != i) . @6 v  S5 T6 Y- h
    113.       {
      % e0 L; e  E& e5 n* m5 t5 J
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      4 b4 P. h  \  O  B5 i/ e: o8 U
    115.       }, N/ t  H3 j* K# `9 e% E1 l( r
    116.     }
      2 J5 w' c4 x( U, h% R) o( L9 t
    117.     l = l + li * m_arr[i + m_n + 1];) C* X- p) i- h: I' H
    118.   }8 s5 u! F# j4 r+ V
    119. #endif+ o3 `0 j  b; }, ?. X; H- F7 R

    120. ' S8 C4 l4 v; E# F
    121.   return l;5 g3 m: I( j* ^9 D6 t
    122. }\" m( a/ y- ]- F\" h4 G/ g- g, w' b
    123. 9 h2 j' p* ]* d4 r
    124. int * E4 [& F( |/ y1 z6 c8 v
    125. main(int argc, char **argv) , i4 j) g! n) e5 J1 D- m9 k
    126. {\" [\" q, i' X, I! `4 K
    127.   int c;\" U) ~' y8 O2 [# c! L; _3 f0 N# s
    128.   extern char *optarg;$ c: C\" \4 M. p0 D5 _
    129.   float res;8 \6 I9 h! o5 o1 j4 V, L+ M

    130. 5 ?7 b/ J2 s- Z% }
    131.   if (argc < 2)
      ' q, q& m3 y- {) u+ Q1 a7 F' }- s
    132.   {4 D. L) b+ K# D; ^+ z2 i
    133.     m_lagrange_interpolating_usage();
      ; k  `  M6 ?3 B; M3 ^
    134.    
      ; N+ V3 [6 H6 W5 u+ U' H
    135.     return -1;
      . H8 m+ D7 ]* K0 {' P( Y9 [' e
    136.   }+ b\" y# ~. k! H/ h4 C

    137. 4 \( J2 A) c\" C
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) / X4 n8 f  B  ~  P) s& r2 P1 S
    139.   {
      7 S; u0 M! }7 }0 W) w5 r' n
    140.     switch (c)
      # v7 f# b* R3 P! W, O1 P) |
    141.     {
      ( t; s4 W, ]* m1 Z$ ?( `  n# Q5 s5 v$ J
    142.       case 'p':
      # J6 i2 ~8 v\" g6 U. l
    143.               m_p = (float) atof(optarg);
      7 O, r+ X- ~( U: `3 t* P4 I
    144.       case 'x':% }. y1 K$ T6 R( U4 h# ]* d
    145.         m_xi = optarg;
      * r% ]- d\" p$ x2 X8 ^6 f5 w
    146.         break;
      - z9 j# [8 S* T2 J, i
    147.       case 'y':7 w8 `& f0 t7 _+ g\" D. ]: F( O# _
    148.         m_yi = optarg;
      2 D9 X4 C+ Q+ _# J
    149.         break;! Q# C; U5 F/ X: h8 W- o% @
    150.     }
      + _# F. F+ z1 [
    151.   }
      / `- G+ @2 Q) i, F/ m$ C' ^
    152. 2 J# M- w1 b' i. [. `
    153.   res = m_lagrange_interpolating();- ^) \1 A# ^4 z- Y# u4 K
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);; M\" r1 F! a0 a1 ?5 W4 \. {
    155.   
      ; W+ t0 _0 N& j3 S1 @
    156.   return 0;4 J( z+ ]5 D0 X* U
    157. }
      0 Y) q, s- z! H\" Z
    复制代码
    回复

    使用道具 举报

    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-12 05:26 , Processed in 0.523467 second(s), 104 queries .

    回顶部