QT&Opencv練習(一)
QT&Opencv練習(一)
使用QT實現最小二乘法擬合十組及以下資料的線性方程
mainwindow.cpp 檔案程式碼如下
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QMessageBox>
#include<QtDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
using namespace std;
void MainWindow::on_pushButton_clicked()
{
QString fileName,fileNamePath;
fileName = QFileDialog::getOpenFileName(this,tr("檔案"),"",tr("*.txt"));
if(!fileName.isNull())
{
QFile file(fileName);
if(!file.open(QFile::ReadOnly|QFile::Text))
{
QMessageBox::warning(this,tr("Error"),tr("read file error:&1").arg(file.errorString()));
return;
}
}
else{
qDebug()<<"取消";//以上為讀檔案模組
}
QFileInfo OpenFileInfo;
OpenFileInfo = QFileInfo(fileName);
fileNamePath = OpenFileInfo.filePath();
ui->label_2->setText(fileNamePath);
//以上為顯示檔名模組
QFile file(fileName);
double a[20],b[20],c[20],d[20];
if(!file.open(QIODevice::ReadOnly))
return;
{
QTextStream textstream(&file);
QString line = textstream.readLine();
QStringList s1;
s1=line.split(" ");
//以空格為標準分割資料並將其輸入值陣列各位中
ui->x1->setText(s1[0]);
ui->x2->setText(s1[1]);
ui->x3->setText(s1[2]);
ui->x4->setText(s1[3]);
ui->x5->setText(s1[4]);
ui->x6->setText(s1[5]);
ui->x7->setText(s1[6]);
ui->x8->setText(s1[7]);
ui->x9->setText(s1[8]);
ui->x10->setText(s1[9]);
line = textstream.readLine();
QStringList s2;
s2=line.split(" ");
ui->y1->setText(s2[0]);
ui->y2->setText(s2[1]);
ui->y3->setText(s2[2]);
ui->y4->setText(s2[3]);
ui->y5->setText(s2[4]);
ui->y6->setText(s2[5]);
ui->y7->setText(s2[6]);
ui->y8->setText(s2[7]);
ui->y9->setText(s2[8]);
ui->y10->setText(s2[9]);
int iInt = 10;
if(s1[0]==0 and s2[0]==0)
iInt=0;
else if(s1[1]==0 and s2[1]==0)
iInt=1;
else if(s1[2]==0 and s2[2]==0)
iInt=2;
else if(s1[3]==0 and s2[3]==0)
iInt=3;
else if(s1[4]==0 and s2[4]==0)
iInt=4;
else if(s1[5]==0 and s2[5]==0)
iInt=5;
else if(s1[6]==0 and s2[6]==0)
iInt=6;
else if(s1[7]==0 and s2[7]==0)
iInt=7;
else if(s1[8]==0 and s2[8]==0)
iInt=8;
else if(s1[9]==0 and s2[9]==0)
iInt=9;
for(int i=0;i<10;i++)
{
a[i] = s1[i].toDouble();//輸入進來的資料是string格式,需要用.toDouble函式轉換為double後才能夠賦予double陣列。
b[i] = s2[i].toDouble();
}
double xy=0,x=0,xp=0,y=0;
for (int i=0;i<iInt;i++)
{
double e =a[i]*b[i];
xy=e+xy;
double g=a[i];
x=x+g;
double j=a[i]*a[i];
xp=j+xp;
double l=b[i];
y=l+y;
}
double n = iInt * xy - x * y;
double o = iInt * xp - x * x;
double p = xp * y - x * xy;
double q = p / o;
double r = n / o;
ui->f1->setText(QString::number(r,'f',2));
ui->f2->setText(QString::number(q,'f',2));
ui->zushu->setText(QString::number(iInt));
for(int i=0;i<iInt;i++)
{
c[i]=r*a[i]+q-b[i];
d[i]=c[i]/b[i]*100;
}
ui->j1->setText(QString::number(c[0],'f',2));
ui->j2->setText(QString::number(c[1],'f',2));
ui->j3->setText(QString::number(c[2],'f',2));
ui->j4->setText(QString::number(c[3],'f',2));
ui->j5->setText(QString::number(c[4],'f',2));
ui->j6->setText(QString::number(c[5],'f',2));
ui->j7->setText(QString::number(c[6],'f',2));
ui->j8->setText(QString::number(c[7],'f',2));
ui->j9->setText(QString::number(c[8],'f',2));
ui->j10->setText(QString::number(c[9],'f',2));
ui->c1->setText(QString::number(d[0],'f',2)+'%');
ui->c2->setText(QString::number(d[1],'f',2)+'%');
ui->c3->setText(QString::number(d[2],'f',2)+'%');
ui->c4->setText(QString::number(d[3],'f',2)+'%');
ui->c5->setText(QString::number(d[4],'f',2)+'%');
ui->c6->setText(QString::number(d[5],'f',2)+'%');
ui->c7->setText(QString::number(d[6],'f',2)+'%');
ui->c8->setText(QString::number(d[7],'f',2)+'%');
ui->c9->setText(QString::number(d[8],'f',2)+'%');
ui->c10->setText(QString::number(d[9],'f',2)+'%');
}
}
.pro檔案與main.cpp檔案內容不做改動。
該程式可以做到讀取*.txt檔案中的資料並進行擬合計算其線性方程,並可以計算擬合結果的絕對誤差與相對誤差。
使用QT的ui繪製功能所設計的程式介面,可以顯示出檔案所在位置、讀到的檔案組數、各組資料的X、Y值、所擬合的線性方程以及絕對誤差與相對誤差。
匯入十組資料後的計算結果。
相關文章
- 一個小練習。
- Appium 實戰練習一APP
- cuda矩陣練習(一)矩陣
- Etcd 實戰練習(一)
- markdown 使用練習練習
- web前端 javascript 練習題一Web前端JavaScript
- 新手練習:Python練習題目Python
- 排序——選擇排序小練習(一)排序
- MATLAB圖形繪製練習(一)Matlab
- rust學習十二、一個I/O程式練習Rust
- MYSQL練習1: DQL查詢練習MySql
- 萌新練習寫程式碼的每日一練:括號生成
- 自學linux第一關練習題Linux
- 關於重構的一點練習
- 一個pyspark 開發練習例項Spark
- 實踐練習一:OceanBase Docker 體驗Docker
- C#第一次練習C#
- python練習Python
- MySQL練習MySql
- ddl練習
- latex練習
- MySQ練習
- openGauss練習
- 240個Python練習案例附原始碼(百看不如一練)Python原始碼
- 序列模型第一週程式設計練習模型程式設計
- python第一節課內容及練習Python
- U7-11課綜合練習+12課階段測評練習——複習練習題目
- python 練習0000Python
- C++練習C++
- shell練習題
- 【練習】canvas——flappyBirdCanvasAPP
- Python 練習題Python
- 隨堂練習
- SQL練習題SQL
- mysql練習題MySql
- TypeScript 練習題TypeScript
- JS原生練習JS
- Bash初練習