24小时热门版块排行榜    

查看: 2420  |  回复: 15
本帖产生 2 个 程序强帖 ,点击这里进行查看

phychemlxd

金虫 (小有名气)

★ ★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
resonant(金币+5):欢迎交流,感谢回帖:-) 2010-04-21 18:34
liangzidou(金币+5):谢谢你的热情帮助,因为你回帖时金币已经赠送完了,就给你追加5个,币不多,略表谢意。 2010-04-22 18:00
wangen994(程序强帖+1):感谢你的参与,呵呵,欢迎常来 2010-05-09 21:49:52
看到你说热力学,来个C/C++版本的,如果你能知道压力对压缩因子/体积/密度的导数(二阶导数)信息的话,用迭代法求也不错,毕竟有时候三角函数计算也很耗时

#include
#include
#include
using namespace std;

typedef unsigned char Boolean;
#define False ((Boolean)'\0')
#define True  ((Boolean)'\1')

typedef int Index;
typedef double Real;

// The last parameter denotes complex roots is allowed or not
// X^3 + Coeff[0]*X^2 + Coeff[1]*X + Coeff[2] = 0
Index CubicRoot(Real *Coeff, Real *Root, Boolean Complex=True)
   {
   Real p=Coeff[0], q=Coeff[1], r=Coeff[2];
   Real Den_3, A, A3, B, B2, D, sqrt_D, M, N;

   Den_3 = 0.33333333333333333333333333;
   Real Den_27 = Den_3*Den_3*Den_3;

   A = Den_3 * (3.0*q - p*p);
   A3 = Den_27*A*A*A;
   B = 2.0*Den_27*p*p*p - Den_3*p*q + r;
   B2 = 0.25*B*B;

   D = A3 + B2;

   if (D >= 0.0)
      {
      sqrt_D = sqrt(D);
      M = pow((-0.5*B + sqrt_D), Den_3);
      N = pow((-0.5*B - sqrt_D), Den_3);
      if (D > 0.0) // 1 root
         {
         Root[0] = M + N;
         nRoot = 1;
         if (bComplex)
            {
            Root[1] = -0.5*(M + N);
            Root[2] = 0.5*sqrt(3.0)*(M - N);
            nRoot = 3;
            }
         }
      else // 2 roots
         {
         Root[0] = M + N;
         Root[1] = Root[2] = -0.5*Root[0];
         nRoot = 2;
         }
      }
   else // 3 real distinct roots
      {
      Real deg = sqrt(-B2/A3);
      Real PI_2 = 1.5707963267949; // 90C
      Real PI_3_2 = 2.0943951023932; // 120C
      Real Theta;
      if (B >= 0.0)
         {
         Theta = (PI_2 + atan(deg/sqrt(1.0 - deg*deg)))*Den_3;
         }
      else
         {
         Theta = atan(sqrt(1.0 - deg*deg)/deg)*Den_3;
         }
      Real factor = 2.0*sqrt(-Den_3*A);

      for (Index i=0; i<3; i++)
         {
         Root = factor*cos(Theta + PI_3_2*i);
         }
      nRoot = 3;
      }

   for (Index i=0; i<3; i++)
      {
      Root -= Den_3*p;
      }

   return nRoot;
   }

int main(int argc, char* argv[])
   {
   string Holding;

   Real a[3] = {-0.9964370251388, 0.0345649889308, -0.000135939438932387};
   Real root[3];
   Index nRoot = CubicRoot(a, root);
   cout<<"Root 1: "<    cout<<"Root 2: "<    cout<<"Root 3: "<    cin>>Holding;

   return 0;
   }
修.齐.治.平
11楼2010-04-21 18:00:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

liangzidou

银虫 (小有名气)

是我用vb编程中要用到解立方型方程的这段程序,呵呵
12楼2010-04-22 17:50:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

liangzidou

银虫 (小有名气)

引用回帖:
Originally posted by phychemlxd at 2010-04-21 18:00:29:
看到你说热力学,来个C/C++版本的,如果你能知道压力对压缩因子/体积/密度的导数(二阶导数)信息的话,用迭代法求也不错,毕竟有时候三角函数计算也很耗时

#include
#include

呵呵,谢谢你了,我没有系统的学过编程语言,不会用C语言,就是vb也是一知半解,不过还是很感谢你提供的解立方型方程的程序。
13楼2010-04-22 17:55:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

phychemlxd

金虫 (小有名气)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
resonant(金币+1):感谢回帖交流:-) 2010-04-23 10:55
有热力学的问题我们可以探讨,如果是做热力学模型计算的话,我在方法上还是能提供一点点小小的帮忙的,呵呵。
修.齐.治.平
14楼2010-04-23 09:16:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

liangzidou

银虫 (小有名气)


jjdg(金币+1):欢迎常来 2010-04-25 01:40
引用回帖:
Originally posted by phychemlxd at 2010-04-23 09:16:17:
有热力学的问题我们可以探讨,如果是做热力学模型计算的话,我在方法上还是能提供一点点小小的帮忙的,呵呵。

嗯,好的,呵呵
15楼2010-04-24 23:23:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhimengfan

铜虫 (小有名气)


小木虫: 金币+0.5, 给个红包,谢谢回帖
牛顿迭代法本身就是不完备的方法,不能保证找到所有根。
16楼2012-07-11 22:01:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 liangzidou 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 311求调剂 +6 冬十三 2026-03-15 6/300 2026-03-16 08:00 by wang_dand
[考研] 化学调剂0703 +7 啊我我的 2026-03-11 7/350 2026-03-15 23:03 by 凌千颂111
[文学芳草园] 伙伴们,祝我生日快乐吧 +15 myrtle 2026-03-10 24/1200 2026-03-15 21:16 by 苏州_逗号
[考博] 东华理工大学化材专业26届硕士博士申请 +6 zlingli 2026-03-13 6/300 2026-03-15 20:00 by ryzcf
[考研] 274求调剂 +4 时间点 2026-03-13 4/200 2026-03-15 15:29 by Rambo13
[考研] 294求调剂 +3 Zys010410@ 2026-03-13 4/200 2026-03-15 10:59 by zhq0425
[考研] 中科大材料专硕319求调剂 +3 孟鑫材料 2026-03-13 3/150 2026-03-14 18:10 by houyaoxu
[考研] 297一志愿上交085600求调剂 +5 指尖八千里 2026-03-14 5/250 2026-03-14 17:26 by a不易
[考研] 一志愿哈工大材料324分求调剂 +5 闫旭东 2026-03-14 5/250 2026-03-14 14:53 by 木瓜膏
[考研] 一志愿天大化工(085600)调剂总分338 +6 蔡大美女 2026-03-09 6/300 2026-03-14 02:46 by JourneyLucky
[考研] 调剂 +3 13853210211 2026-03-10 3/150 2026-03-14 00:47 by JourneyLucky
[考研] 271求调剂 +10 生如夏花… 2026-03-11 10/500 2026-03-14 00:35 by 卖报员小雨
[考研] 308求调剂 +3 是Lupa啊 2026-03-10 3/150 2026-03-14 00:30 by JourneyLucky
[考研] 311求调剂 +8 zchqwer 2026-03-10 8/400 2026-03-14 00:01 by JourneyLucky
[考研] 求材料调剂 085600英一数二总分302 前三科235 精通机器学习 一志愿哈工大 +4 林yaxin 2026-03-12 4/200 2026-03-13 22:04 by 星空星月
[考研] 26考研求调剂 +5 丶宏Sir 2026-03-13 5/250 2026-03-13 13:05 by JourneyLucky
[考研] 0703一志愿211 285分求调剂 +4 ly3471z 2026-03-13 4/200 2026-03-13 13:00 by JourneyLucky
[考研] 0817化学工程与技术考研312分调剂 +3 T123 tt 2026-03-12 3/150 2026-03-13 10:49 by houyaoxu
[考研] 085602化工求调剂 +7 董boxing 2026-03-10 7/350 2026-03-10 17:07 by BruceLiu320
[考研] 327分求调剂086 +4 西红柿?小帅 2026-03-09 7/350 2026-03-10 14:47 by ruiyingmiao
信息提示
请填处理意见