NFT鏈上鑄造交易智慧合約模式系統開發詳情介紹
Web(World Wide Web)即全球廣域網,開發+ I8I鏈上合約- 259l智慧合約 3365也稱為全球資訊網,它是一種基於超文字和
HTTP的、全球性的、動態互動的、跨平臺的分散式圖形資訊系統。是建立在Internet上的一種網路服務,為瀏覽者在Internet
上查詢和瀏覽資訊提供了圖形化的、易於訪問的直觀介面,其中的檔案及超級連結將Internet上的資訊節點組織成一個互為關聯
的網狀結構。
Web 1.0是關於獲取和閱讀資訊的。
Web 2.0是關於閱讀、建立、分享以及與使用者的互動。Web 3.0是第三代全球資訊網,一個執行在“區塊鏈”技術之上的“去中
心化”網路。Web1.0時代Web 1.0是全球資訊網發展的第一階段。大致是從1991年到2004年。在Web 1.0時代只有少數內容生產者
,絕大多數使用者是內容的消費者。個人網頁很常見,主要由託管在ISP執行的Web伺服器或免費Web託管服務上的靜態頁面組成
.
Web 1.0是一種內容分發網路(CDN),可以在網站上展示資訊。可以用作個人網站,根據檢視的頁面向使用者收費,具有使用
戶能夠檢索特定資訊的目錄。
/*
author: cclplus
date : 2018 / 12 / 09
if you think it is necessary to reward me,
my alipay account number is 707101557@qq.com
*/
#include "pch.h"
#include "matrix.h"
using std::endl;
using std::cout;
using std::istream;
const double EPS = 1e-10;
void Matrix::initialize() {//初始化矩陣大小
p = new double*[rows_num];//分配rows_num個指標
for (int i = 0; i < rows_num; ++i) {
p[i] = new double[cols_num];//為p[i]進行動態記憶體分配,大小為cols
}
}
//宣告一個全0矩陣
Matrix::Matrix(int rows, int cols)
{
rows_num = rows;
cols_num = cols;
initialize();
for (int i = 0; i < rows_num; i++) {
for (int j = 0; j < cols_num; j++) {
p[i][j] = 0;
}
}
}
//宣告一個值全部為value的矩陣
Matrix::Matrix(int rows, int cols, double value)
{
rows_num = rows;
cols_num = cols;
initialize();
for (int i = 0; i < rows_num; i++) {
for (int j = 0; j < cols_num; j++) {
p[i][j] = value;
}
}
}
//解構函式
Matrix::~Matrix() {
for (int i = 0; i < rows_num; ++i) {
delete[] p[i];
}
delete[] p;
}
//實現矩陣的複製
Matrix& Matrix::operator=(const Matrix& m)
{
if (this == &m) {
return *this;
}
if (rows_num != m.rows_num || cols_num != m.cols_num) {
for (int i = 0; i < rows_num; ++i) {
delete[] p[i];
}
delete[] p;
rows_num = m.rows_num;
cols_num = m.cols_num;
initialize();
}
for (int i = 0; i < rows_num; i++) {
for (int j = 0; j < cols_num; j++) {
p[i][j] = m.p[i][j];
}
}
return *this;
}
//將陣列的值傳遞給矩陣(要求矩陣的大小已經被宣告過了)
Matrix& Matrix::operator=(double *a){
for(int i=0;i<rows_num;i++){
for(int j=0;j<cols_num;j++){
p[i][j]= *(a+i*cols_num+j);
}
}
return *this;
}
//+=操作
Matrix& Matrix::operator+=(const Matrix& m)
{
for (int i = 0; i < rows_num; i++) {
for (int j = 0; j < cols_num; j++) {
p[i][j] += m.p[i][j];
}
}
return *this;
}
//實現-=
Matrix& Matrix::operator-=(const Matrix& m)
{
for (int i = 0; i < rows_num; i++) {
for (int j = 0; j < cols_num; j++) {
p[i][j] -= m.p[i][j];
}
}
return *this;
}
//實現*=
Matrix& Matrix::operator*=(const Matrix& m)
{
Matrix temp(rows_num, m.cols_num);//若C=AB,則矩陣C的行數等於矩陣A的行數,C的列數等於B的列數。
for (int i = 0; i < temp.rows_num; i++) {
for (int j = 0; j < temp.cols_num; j++) {
for (int k = 0; k < cols_num; k++) {
temp.p[i][j] += (p[i][k] * m.p[k][j]);
}
}
}
*this = temp;
return *this;
}
//實現矩陣的乘法
Matrix Matrix::operator*(const Matrix & m)const{
Matrix ba_M(rows_num,m.cols_num,0.0);
for(int i=0;i<rows_num;i++){
for(int j=0;j<m.cols_num;j++){
for(int k=0;k<cols_num;k++){
ba_M.p[i][j]+=(p[i][k]*m.p[k][j]);
}
}
}
return ba_M;
}
//解方程Ax=b
Matrix Matrix::Solve(const Matrix &A, const Matrix &b)
{
//高斯消去法實現Ax=b的方程求解
for (int i = 0; i < A.rows_num; i++) {
if (A.p[i][i] == 0) {
cout << "請重新輸入" << endl;
}
for (int j = i + 1; j < A.rows_num; j++) {
for (int k = i + 1; k < A.cols_num; k++) {
A.p[j][k] -= A.p[i][k] * (A.p[j][i] / A.p[i][i]);
if (abs(A.p[j][k]) < EPS)
A.p[j][k] = 0;
}
b.p[j][0] -= b.p[i][0] * (A.p[j][i] / A.p[i][i]);
if (abs(A.p[j][0]) < EPS)
A.p[j][0] = 0;
A.p[j][i] = 0;
}
}
// 反向代換
Matrix x(b.rows_num, 1);
x.p[x.rows_num - 1][0] = b.p[x.rows_num - 1][0] / A.p[x.rows_num - 1][x.rows_num - 1];
if (abs(x.p[x.rows_num - 1][0]) < EPS)
x.p[x.rows_num - 1][0] = 0;
for (int i = x.rows_num - 2; i >= 0; i--) {
double sum = 0;
for (int j = i + 1; j < x.rows_num; j++) {
sum += A.p[i][j] * x.p[j][0];
}
x.p[i][0] = (b.p[i][0] - sum) / A.p[i][i];
if (abs(x.p[i][0]) < EPS)
x.p[i][0] = 0;
}
return x;
}
//矩陣顯示
void Matrix::Show() const {
//cout << rows_num <<" "<<cols_num<< endl;//顯示矩陣的行數和列數
for (int i = 0; i < rows_num; i++) {
for (int j = 0; j < cols_num; j++) {
cout << p[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
//實現行變換
void Matrix::swapRows(int a, int b)
{
a--;
b--;
double *temp = p[a];
p[a] = p[b];
p[b] = temp;
}
//計算矩陣行列式的值
double Matrix::det(){
//為計算行列式做一個備份
double ** back_up;
back_up=new double *[rows_num];
for(int i=0;i<rows_num;i++){
back_up[i]=new double[cols_num];
}
for(int i=0;i<rows_num;i++){
for(int j=0;j<cols_num;j++){
back_up[i][j]=p[i][j];
}
}
if(rows_num!=cols_num){
std::abort();//只有方陣才能計算行列式,否則呼叫中斷強制停止程式
}
double ans=1;
for(int i=0;i<rows_num;i++){
//透過行變化的形式,使得矩陣對角線上的主元素不為0
if(abs(p[i][i])<=EPS){
bool flag=false;
for(int j=0;(j<cols_num)&&(!flag);j++){
//若矩陣的一個對角線上的元素接近於0且能夠透過行變換使得矩陣對角線上的元素不為0
if((abs(p[i][j])>EPS)&&(abs(p[j][i])>EPS)){
flag=true;
//注:進行互換後,p[i][j]變為p[j][j],p[j][i]變為p[i][i]
//對矩陣進行行變換
double temp;
for(int k=0;k<cols_num;k++){
temp=p[i][k];
p[i][k]=p[j][k];
p[j][k]=temp;
}
}
}
if(flag)
return 0;
}
}
for(int i=0;i<rows_num;i++){
for(int j=i+1;j<rows_num;j++){
for(int k=i+1;k<cols_num;k++){
p[j][k]-=p[i][k]*(p[j][i]*p[i][i]);
}
}
}
for(int i=0;i<rows_num;i++){
ans*=p[i][i];
}
for(int i=0;i<rows_num;i++){
for(int j=0;j<cols_num;j++){
p[i][j]=back_up[i][j];
}
}
return ans;
}
//返回矩陣第i行第j列的數
double Matrix::Point(int i, int j) const{
return this->p[i][j];
}
//求矩陣的逆矩陣
Matrix Matrix::inv(Matrix A){
if(A.rows_num!=A.cols_num){
std::cout<<"只有方陣能求逆矩陣"<<std::endl;
std::abort();//只有方陣能求逆矩陣
}
double temp;
Matrix A_B=Matrix(A.rows_num,A.cols_num);
A_B=A;//為矩陣A做一個備份
Matrix B=eye(A.rows_num);
//將小於EPS的數全部置0
for (int i = 0; i < A.rows_num; i++) {
for (int j = 0; j < A.cols_num; j++) {
if (abs(A.p[i][j]) <= EPS) {
A.p[i][j] = 0;
}
}
}
//選擇需要互換的兩行選主元
for(int i=0;i<A.rows_num;i++){
if(abs(A.p[i][i])<=EPS){
bool flag=false;
for(int j=0;(j<A.rows_num)&&(!flag);j++){
if((abs(A.p[i][j])>EPS)&&(abs(A.p[j][i])>EPS)){
flag=true;
for(int k=0;k<A.cols_num;k++){
temp=A.p[i][k];
A.p[i][k]=A.p[j][k];
A.p[j][k]=temp;
temp=B.p[i][k];
B.p[i][k]=B.p[j][k];
B.p[j][k]=temp;
}
}
}
if(!flag){
std::cout<<"逆矩陣不存在\n";
std::abort();
}
}
}
//透過初等行變換將A變為上三角矩陣
double temp_rate;
for(int i=0;i<A.rows_num;i++){
for(int j=i+1;j<A.rows_num;j++){
temp_rate=A.p[j][i]/A.p[i][i];
for(int k=0;k<A.cols_num;k++){
A.p[j][k]-=A.p[i][k]*temp_rate;
B.p[j][k]-=B.p[i][k]*temp_rate;
}
A.p[j][i]=0;
}
}
//使對角元素均為1
for(int i=0;i<A.rows_num;i++){
temp=A.p[i][i];
for(int j=0;j<A.cols_num;j++){
A.p[i][j]/=temp;
B.p[i][j]/=temp;
}
}
//std::cout<<"演演算法可靠性檢測,若可靠,輸出上三角矩陣"<<std::endl;
//將已經變為上三角矩陣的A,變為單位矩陣
for(int i=A.rows_num-1;i>=1;i--){
for(int j=i-1;j>=0;j--){
temp=A.p[j][i];
for(int k=0;k<A.cols_num;k++){
A.p[j][k]-=A.p[i][k]*temp;
B.p[j][k]-=B.p[i][k]*temp;
}
}
}
std::cout<<"演演算法可靠性檢測,若可靠,輸出單位矩陣"<<std::endl;
for(int i=0;i<A.rows_num;i++){
for(int j=0;j<A.cols_num;j++){
printf("%7.4lf\t\t",A.p[i][j]);
}
cout << endl;
}
A=A_B;//還原A
return B;//返回該矩陣的逆矩陣
}
//製造一個單位矩陣
Matrix Matrix::eye(int n){
Matrix A(n,n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j){
A.p[i][j]=1;
}else{
A.p[i][j]=0;
}
}
}
return A;
}
//讀取矩陣行列數
int Matrix::row() const{
return rows_num;
}
int Matrix::col() const{
return cols_num;
}
//實現矩陣的轉置
Matrix Matrix::T(const Matrix & m)
{ int col_size=m.col();
int row_size=m.row();
Matrix mt(col_size, row_size);
for (int i = 0; i <row_size; i++) {
for (int j = 0; j <col_size; j++) {
mt.p[j][i] = m.p[i][j];
}
}
return mt;
}
//高斯消元法
Matrix Matrix::gaussianEliminate()
{
Matrix Ab(*this);
int rows = Ab.rows_num;
int cols = Ab.cols_num;
int Acols = cols - 1;
int i = 0; //跟蹤行
int j = 0; //跟蹤列
while (i < rows)
{
bool flag = false;
while (j < Acols && !flag)
{
if (Ab.p[i][j] != 0) {
flag = true;
}
else {
int max_row = i;
double max_val = 0;
for (int k = i + 1; k < rows; ++k)
{
double cur_abs = Ab.p[k][j] >= 0 ? Ab.p[k][j] : -1 * Ab.p[k][j];
if (cur_abs > max_val)
{
max_row = k;
max_val = cur_abs;
}
}
if (max_row != i) {
Ab.swapRows(max_row, i);
flag = true;
}
else {
j++;
}
}
}
if (flag)
{
for (int t = i + 1; t < rows; t++) {
for (int s = j + 1; s < cols; s++) {
Ab.p[t][s] = Ab.p[t][s] - Ab.p[i][s] * (Ab.p[t][j] / Ab.p[i][j]);
if (abs(Ab.p[t][s]) <EPS)
Ab.p[t][s] = 0;
}
Ab.p[t][j] = 0;
}
}
i++;
j++;
}
return Ab;
}
//實現矩陣的輸入
istream& operator>>(istream& is, Matrix& m)
{
for (int i = 0; i < m.rows_num; i++) {
for (int j = 0; j < m.cols_num; j++) {
is >> m.p[i][j];
}
}
return is;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70012429/viewspace-2939323/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- NFT鑄造鏈上智慧合約系統開發(詳情方案)丨NFT鏈上鑄造智慧合約系統開發(需求原始碼)原始碼
- NFT鏈上鑄造交易智慧合約開發demo
- web3.0智慧合約NFT鑄造交易系統開發詳情方案Web
- 鑄造NFT鏈上合成交易智慧合約平臺系統開發丨技術介紹
- NFT鑄造鏈上智慧合約模式系統開發丨DAPP技術介紹模式APP
- NFT鏈上鑄造智慧合約系統開發(模型探討) | NFT鏈上智慧合約鑄造系統原始碼demo模型原始碼
- NFT鑄造智慧合約交易平臺系統開發丨Opensea系統開發介紹
- NFT鏈上鑄造交易智慧合約專案開發搭建
- NFT鑄造智慧合約公排系統開發詳情方案
- NFT鏈上鑄造智慧合約平臺系統開發詳情丨區塊鏈技術上區塊鏈
- NFT鑄造合集智慧合約交易平臺系統開發丨技術介紹
- NFT鑄造鏈上智慧合約系統開發(詳細說明)丨NFT鑄造鏈上智慧合約原始碼版開發原始碼
- NFT鑄造交易合成平臺系統開發丨區塊鏈智慧合約部署程式碼詳情區塊鏈
- NFT鑄造合約平臺系統開發詳情案例
- DAPP鏈上合約互助模式系統開發詳情介紹APP模式
- NFT鑄造競拍交易平臺dapp系統開發合約部署詳情APP
- 丨數字藏品鏈上鑄造智慧合約原始碼版數字藏品鏈上鑄造智慧合約系統開發(方案詳情)原始碼
- { NFT }鑄造智慧合約交易平臺模式軟體開發(方案)模式
- DAPP/defi智慧合約交易系統開發詳情/NFT智慧合約盲盒模式方案.搭建APP模式
- NFT鑄造合成鏈上理財系統開發模式模式
- NFT鏈上鑄造opensea交易系統開發技術方案
- NFT交易平臺系統開發丨NFT發行鑄造交易系統開發詳情原始碼搭建原始碼
- NFT鏈上智慧合約理財系統開發詳情
- NFT生成鑄造智慧合約系統開發功能分析
- DAPP 智慧合約NFT鏈上質押挖礦系統開發詳情APP
- NFT鏈上鑄造交易平臺系統開發功能分析
- 關於DAPP馬蹄鏈合約模式系統開發詳情介紹APP模式
- DAPP鏈上合約鑄造NFT質押挖礦系統開發技術APP
- 智慧合約NFT鏈上質押模式系統開發案例模式
- NFT 鑄造交易 OpenSea 平臺系統開發案例技術介紹
- 智慧合約系統開發原理介紹丨智慧合約開發原始碼詳情原始碼
- 關於智慧合約DAPP質押模式系統開發詳情介紹APP模式
- NFT鑄造盲盒挖礦智慧合約系統開發定製詳情丨DAPP技術框架APP框架
- NFT鑄造合成交易盲盒質押系統開發詳情方案
- NFT盲盒鑄造質押借貸dapp系統開發合約定製詳情APP
- AI繪畫NFT藝術品鑄造dapp系統開發合約編寫詳情AIAPP
- NFT鑄造交易合成盲盒交易系統開發詳情丨DAPP技術框架APP框架
- NFT代幣鑄造質押dapp系統開發功能模式介紹APP模式