QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 21845|回复: 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自定义插值函数插值计算数值计算! i8 l' T3 X$ C. t' L' d! a6 c2 g 版本号: 04y09m28 0 `1 Y! E+ _5 M分类: 工程设计应用# b% H" i& g ~8 r 性质: 免费软件 3 j, W- {% M2 J% E4 S: _使用说明:

    / C, r, j, O3 q5 i; I

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: ! ?% o# ?' Q, ]4 o/ Z 3 }0 E/ ?) t k 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    * a+ T7 ^+ J1 a' @5 N* M2 R

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

    / @5 K2 f% l \7 S# p( m

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 ]+ L5 S! p) S* b' y9 w+ _9 s0 H % T c) y; W5 O4 A/ ]0 I 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 ' a+ q4 `( P% ~$ Y单曲线lagrange插值函数:double twlq(double x,char* filename);) ]* T5 T/ a' l M! N/ j double twlx(double q,char* filename);! h8 | R) ]: W/ t" P% j' ~& I 曲线组lagrange插值函数:6 I0 g' P3 H7 R* y5 s8 o G0 r" Z double thlq(double x,double y,char* filename); & [/ n4 g, e) o5 t$ R% r double thlx(double y,double q,char* filename); % b- U9 h y* O# G double thly(double x,double q,char* filename);。

    0 b* F8 _1 A0 w0 U9 A, E) D9 S

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:- A0 n, x; {3 q( V @ Description @. b1 S2 c* N! L) @ n, nsel;4 H/ G. l0 Q0 V) p x[0],x[1], x[2],··, x[n-2],x[n-1];' a: r: J& G, {" ^, b# g q[0],q[1], q[2],··, q[n-2],q[n-1];5 E3 r" Y$ p" X2 M1 z4 D MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    1 }- n, f) q L: S. n

    注解: ) }% V! q/ S3 Q& p Description:用户自定义描述字符串(Description中不可有@符号); ) Q/ F1 X, \% y \) ^' |9 _ n: 总插值点个数; ) Q4 K2 m2 x7 F7 g% ^ nsel:实际参与插值计算的插值点个数; 3 q4 Y8 Z# ~/ F MinX=0.7,MaxX=0.9 取值范围;1 J9 v7 N, ` E8 I# V OverRangeAlm=1 越限报警 1:报, 0:不报;" Y2 Q4 E6 n; `6 I/ A4 J5 Y X=电压,XUnit=mv,变量名称,单位。

    0 }$ H0 ^2 |0 t2 t. t# A+ g g( R

    ****结论: " F% o8 j: P( J2 _+ l$ k. v l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。6 p/ @8 T2 p8 q& B7 B 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 6 Z* [: m; }- f" w" n2 @5 m: n 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。$ b3 d0 `* M2 e, a 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    , S i7 X2 _2 z$ L1 J

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

    5 @5 ^: Z! M1 M7 G

    [分享]插值软件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. # r5 g# s8 P. p
    2. /* TODO: Lagrange interpolating 8 N! }; @! b/ z6 e5 S, s
    3. *  c3 X5 e8 l\" P# X) O
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      & G9 q! V5 T7 i7 l
    5. * In this situation, it could be solved via lagrange interpolating
      # a) J1 `' J' y
    6. *
      & a# x\" B# R$ H9 D& u
    7. * */
      + v. C. t6 K- J. V* ?9 A
    8. , d0 H7 q5 a2 f- n' A6 L\" e
    9. #include <stdio.h>
      6 D\" D6 C! h- X- H5 T7 }& J
    10. #include <stdlib.h>
      \" g& I8 W: M3 V9 S- I  a6 h# U
    11. #include <string.h>4 K4 M% W& n, G: f& }
    12. 1 _  [- X+ e! ^
    13. #define DEBUG 0
      5 G0 h) L$ i. h4 v) k# U

    14. ; S5 d1 e/ q9 e4 i; b$ S6 H
    15. static float m_p = 0.5635;
      0 `7 g, w3 H4 @$ G/ ^; X
    16. static char *m_xi = NULL;
      $ A- E# k! J& F  D3 y6 e  [; _! k  z
    17. static char *m_yi = NULL;
      $ h9 a4 w) {\" G% k$ v. U
    18. static float m_arr[] = {};) m\" v4 I5 c  Y$ ]. [4 F+ t
    19. static unsigned int m_n = 0;' N2 O* @, ^, C

    20. 5 r$ N8 a8 R, M6 {$ X- T, m
    21. static void m_lagrange_interpolating_usage();
      ) T% T9 d5 S7 {% K
    22. static int m_lagrange_interpolating_set_n_arr();
      8 M) P' B8 h: l6 C
    23. static float m_lagrange_interpolating();. w\" f& T  U\" G& B/ M+ _5 h4 l- H: }
    24.   K0 ~9 a# ^% E: q% H
    25. static void : r% u& {( J* z% M
    26. m_lagrange_interpolating_usage()
      # n% q& g: N: i
    27. {( J\" s; c( c# b, \) h/ Z/ I7 [
    28.   printf("Lagrange Interpolating Usage:\n");
      0 A) s, y) X* J6 K! F% y
    29.   printf("bin/li -p ** -x ** -y **\n");
      + U! s; o& B( E9 O: w
    30.   printf("-p 0.5635\n");
      , m& ?- n6 h7 q0 h! k* H
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      ( u) U7 F  B6 b
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");+ [  c' d* e9 s  o  l( C/ Q9 N
    33. }
      $ p- n6 T+ c) p6 k( ?  h9 ^: a
    34. & D9 |- |5 A0 o& g/ _5 I2 g, Y
    35. static int
      : X1 {* u5 Q, V6 Y2 y# T
    36. m_lagrange_interpolating_set_n_arr()
      / ]$ }) v) |& h8 t0 `
    37. {( u9 q/ K) S  `7 t5 ~3 F
    38.   int xi_n = 0;- Q! n6 @6 `8 `& |
    39.   int yi_n = 0;$ j7 C. I$ p  X\" R: l5 \
    40.   int n = 0;
      % d2 T8 k) e$ |% E7 `5 c$ D
    41.   char *token = NULL;
      6 E& |' M3 p; o2 C
    42.   const char *delim = ",";- R3 f! R. n; B' M0 x% ?
    43. 9 `  O2 g, C8 ]. a
    44.   token = strtok(m_xi, delim);
      - a- a\" `0 ^5 l: e0 G
    45.   while (token)
      . z/ m7 N+ o5 v- w4 `9 S* m# P\" ^
    46.   {
      # ]/ ~. t- f, x& p3 a2 D/ ^
    47.     xi_n++;( Q( g9 r) R: J: B, S' K0 S% o5 P
    48.     n++;
      : l: F5 s$ b\" F+ C1 Q' X: V  {2 S6 y
    49.     m_arr[n] = (float) atof(token);
      0 S2 W9 f0 }4 R: z5 \8 i5 J) A
    50.     token = strtok(NULL, delim);4 J* V2 U3 `' `8 n) r
    51.   }
      3 h# `2 f' V7 Q: N! F; M7 Y

    52. + C8 G  U# f) r1 |, j
    53.   token = strtok(m_yi, delim);
      ; Q; I2 u3 y3 ~\" C9 w4 T- Q  o+ A
    54.   while (token): F4 B' F* E6 w+ j! S. o
    55.   {
      2 _: Y/ W5 T& r' _0 K
    56.     yi_n++;8 Q1 e$ c6 v& M; G
    57.     n++;
        ^+ u\" |& p/ `. @% V! Z
    58.     m_arr[n] = (float) atof(token);) i9 R1 i0 ~7 c9 \; _5 _& c
    59.     token = strtok(NULL, delim);' D( j! Y0 h! t4 @: Z
    60.   }
      % a- m6 J* ~1 {( i: L7 R* v
    61.   ( V1 B& U* I, {1 u  p/ h5 ^8 v' H
    62.   if (xi_n != yi_n)
      . i% P7 Z( u7 Z' F! i
    63.   {
      4 m2 P+ m9 N( J
    64.     return 0;
      3 \* R. {6 Y) S- w
    65.   }7 A  Q. C) s- z7 q

    66. 1 {2 O! n; V! }7 h* o
    67.   m_n = xi_n = yi_n;5 c. M. s3 M1 F7 m  B5 U
    68. 6 |+ k# d: ?6 x
    69.   return 1;
      ; H. b! C0 `  B5 G
    70. }/ |  U, v8 q8 G7 n
    71. 6 H+ t& A7 J4 F1 Y\" b4 O# F
    72. static float , h, I0 |5 g; @
    73. m_lagrange_interpolating()
      + e# m3 J9 ~- |( k
    74. {4 L5 u6 C; r+ O% h
    75.   float l = 0.00000;/ j6 R8 q* ^* u0 P; O5 X8 a: h1 Q8 ]
    76.   float li;; W. B1 D\" Q, M: N, M
    77.   int i;& ~& N7 n; N, `
    78.   int j;
      ; q0 p1 D% i! q
    79. 3 `\" j% V; }; U1 Q6 Q$ J
    80. #if DEBUG
      ! |; L\" W2 i  G5 f0 f+ U3 ~
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      ' b1 _1 r6 C$ T; K0 n. Z3 K
    82.   unsigned int m_n = 3;
      \" H+ {' w( b: v7 l
    83.   float m_p = 0.5635;
      - P; Q8 ]# c( }& x! A# G& j
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};' X5 q- `& x9 d3 x
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      ( x4 n/ O3 g6 V- {  W( M
    86.   
      0 a; o5 S! a1 L( K- k1 k2 Z
    87.   for (i = 0; i < m_n; i++)/ D. n; r5 J) t0 m8 z1 i
    88.   {
      , c) A# @$ F3 }: D; F
    89.     li = 1.0000000;; U6 Q$ P  E3 V! |# r; E% `4 }% ^
    90.     for (j = 0; j < m_n; j++)  S+ a+ _& s\" r% G; A
    91.     {
      9 e+ L$ L$ i0 @5 h% J2 y
    92.       if (j != i)# y; M: x7 v+ {# i+ ]
    93.       {0 r' G; Z, ?+ V. C: N
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);# G8 s' A% R, ~+ o\" B
    95.       }3 _\" T5 e: y& Y$ I7 ?1 Q
    96.     }
      1 t; t1 w6 ^6 q; h9 i
    97.     l = l + li * m_y[i];
      ) [$ C9 K5 d+ Z8 `5 ^. G1 C
    98.   }
      9 H1 O: @, [, o5 ~
    99. #else8 x9 l  O! H4 j* O) e
    100.   if (!m_lagrange_interpolating_set_n_arr()) 7 B8 I; C\" u) v8 [8 b0 E
    101.   {  |5 K\" ~% U* Y$ V  z, d1 R, o) V/ X/ u
    102.     printf("Error: xi and yi counter is diff\n");
        p4 g9 p+ n* C. S
    103.    
      6 B2 B( _; R, {8 k( L# a
    104.     return 0;
      3 b3 _; d- l8 P3 }) b
    105.   }2 N: a; R  G7 @$ y2 k) S

    106. & Z9 Q8 }% I0 e9 S: X7 r+ G4 `& }
    107.   for (i = 0; i < m_n; i++)
      : \) K, k7 H( I; ?
    108.   {- L5 u% h$ j, @: a
    109.     li = 1.0000000;( g' g3 A/ @5 H! c2 _
    110.     for (j = 0; j < m_n; j++)
      ' p# j\" _& s6 X* z\" g
    111.     {. l* W) V  n( s1 b3 C. U; p0 P- {. `
    112.       if (j != i)
      , s9 m+ w( N\" a2 C& a
    113.       {
      / o* h8 u. j1 ^% y8 B
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      2 d2 H+ [& n+ q+ {& z; x\" w
    115.       }
      6 C0 M6 S/ g0 i. R
    116.     }- X  A) C6 I- n: _\" O' |
    117.     l = l + li * m_arr[i + m_n + 1];
      8 a  F/ A# K8 A
    118.   }
      : J, g# j  h1 R. }* H\" F# `1 b+ i
    119. #endif: ^: M1 Z: ^- R\" D

    120. 6 Q/ m2 f. X7 O2 o' ^
    121.   return l;
      \" u; o$ p0 i; C3 X, ?, ~
    122. }1 @8 c: x  W\" M
    123. 6 @; ]8 i* ^% b3 `- G; O( m
    124. int ( X0 L! f2 N: K/ k
    125. main(int argc, char **argv) . z# ?% {0 W1 A: K. }: S( E
    126. {
      5 |0 _7 w% q( t( |/ Q# `
    127.   int c;
        X: {, @  I2 D5 Z8 f
    128.   extern char *optarg;  s( b& L: z+ q4 t% `7 Y9 i
    129.   float res;
      0 B+ s2 Q; L\" B

    130. 5 U9 s2 S! v1 i9 r! H
    131.   if (argc < 2) 2 S. s) Z: U( y/ p, m; D
    132.   {* S* m$ t5 |/ R! i) `1 J8 p
    133.     m_lagrange_interpolating_usage();
      # d+ p. H$ g$ W! P$ b: w. v3 ?
    134.     / x) N2 D4 k# [7 x, ~, D\" }
    135.     return -1;
      \" Y& W: A5 O4 t( A# S; B1 M
    136.   }
      2 n. }- b) V) ?
    137. / h+ e3 k( X! j7 T- ^
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) 2 L+ b% l; ~$ w( r4 M6 t
    139.   {
      0 p- W3 ~3 b. ]/ T
    140.     switch (c)
      . M1 x8 u8 H, m4 V& q\" O+ y
    141.     {
      * A! o! k! u  U6 E- W8 L
    142.       case 'p':
      : x$ D! G+ r- ?8 O
    143.               m_p = (float) atof(optarg);- h  H4 G  [! R0 {& O; a3 l
    144.       case 'x':
      1 H$ u# z. U  r7 m3 k
    145.         m_xi = optarg;# \$ ^8 a3 J( @6 G! G, G& T/ {
    146.         break;( B+ y' J6 h$ _) p, T+ r2 l* u# b) d
    147.       case 'y':
      ' b  V/ S% T  m
    148.         m_yi = optarg;, t4 O, ?, P# ]+ ^4 \
    149.         break;! h& L& z8 u8 E! C7 }
    150.     }6 j  c9 _\" o3 F\" P; s. h+ {
    151.   }
      5 ?' ~# p\" S# l\" z

    152. ' E! i1 @* P+ g( {/ e# I0 N2 ?
    153.   res = m_lagrange_interpolating();/ p1 f2 p4 _  L4 b0 {' g4 v4 [
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      6 ?) x& Y$ i\" u% Z! S
    155.   . @1 J0 b4 x1 G0 E
    156.   return 0;
      6 Y% j. n! l8 S0 `
    157. }9 J4 w# N4 |! |; T
    复制代码
    回复

    使用道具 举报

    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, 2025-11-12 00:32 , Processed in 4.127919 second(s), 105 queries .

    回顶部