⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmnewt.cpp

📁 这是C++数值算法(第二版)的源代码,其中包含了目前一些比较常用的数值计算的算法.
💻 CPP
字号:
#include <iostream>
#include <iomanip>
#include <cmath>
#include "nr.h"
using namespace std;

// Driver for routine mnewt

void usrfun(Vec_I_DP &x, Vec_O_DP &fvec, Mat_O_DP &fjac)
{
        int i;

        int n=x.size();
        fjac[0][0] = -2.0*x[0];
        fjac[0][1] = -2.0*x[1];
        fjac[0][2] = -2.0*x[2];
        fjac[0][3] = 1.0;
        for (i=0;i<n;i++) fjac[1][i] = 2.0*x[i];
        fjac[2][0] = 1.0;
        fjac[2][1] = -1.0;
        fjac[2][2] = 0.0;
        fjac[2][3] = 0.0;
        fjac[3][0] = 0.0;
        fjac[3][1] = 1.0;
        fjac[3][2] = -1.0;
        fjac[3][3] = 0.0;
        fvec[0] = -SQR(x[0])-SQR(x[1])-SQR(x[2])+x[3];
        fvec[1] = SQR(x[0])+SQR(x[1])+SQR(x[2])+SQR(x[3])-1.0;
        fvec[2] = x[0]-x[1];
        fvec[3] = x[1]-x[2];
}

int main(void)
{
        const int NTRIAL=5,N=4;
        const DP TOLX=1.0e-6,TOLF=1.0e-6;
        int kk,k,i,j;
        DP xx;
        Vec_DP fvec(N),x(N);
        Mat_DP fjac(N,N);

        cout << fixed << setprecision(6);
        for (kk=0;kk<2;kk++) {
          for (k=0;k<3;k++) {
            xx=0.2001*k*(2*kk-1);
            cout << "Starting vector number " << (k+1) << endl << endl;
            for (i=0;i<4;i++) {
              x[i]=xx+0.2*(i+1);
              cout << setw(7) << "x[" << i << "] = ";
              cout << setw(12) << x[i] << endl;
            }
            cout << endl;
            for (j=0;j<NTRIAL;j++) {
              NR::mnewt(1,x,TOLX,TOLF);
              usrfun(x,fvec,fjac);
              cout << setw(5) << "i" << setw(12) << "x[i]";
              cout << setw(14) << "f" << endl;
              for (i=0;i<N;i++) {
                cout << setw(5) << i << setw(14) << x[i];
                cout << setw(15) << fvec[i] << endl;
              }
              cout << endl << "press RETURN to continue..." << endl;
              cin.get();
            }
          }
        }
        return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -