该网站暂时处于起步开发阶段,很多功能不是很完善,运行速度等有待提高,但是相对于自己配置环境来说简单很多,对新手十分友好。有着公式图片识别和在线编辑,特别友好。但是该功能暂时还有bug(每次上传完图片要刷新网页才能重新上传),暂时还是推荐其他公式转letax工具,如:mathtype等。
新年价格:永久会员 99 超值。现在该活动已过期,还想99拥有永久会员就要等等啦
推荐所有想做数学建模、写论文的同学学学letax上手简单
2022.2.24评论
Personal Blog
该网站暂时处于起步开发阶段,很多功能不是很完善,运行速度等有待提高,但是相对于自己配置环境来说简单很多,对新手十分友好。有着公式图片识别和在线编辑,特别友好。但是该功能暂时还有bug(每次上传完图片要刷新网页才能重新上传),暂时还是推荐其他公式转letax工具,如:mathtype等。
新年价格:永久会员 99 超值。现在该活动已过期,还想99拥有永久会员就要等等啦
推荐所有想做数学建模、写论文的同学学学letax上手简单
2022.2.24评论
该软件有很多拟合方法供你选择,数据拟合可以直接用该软件,强烈推荐。
PLS 网上并没有找到严格的 多元高次线性回归 的严格证明, 但经过测试我验证了代码的可用性,一定情况下高次(即可包含如x*x的项)拟合r2更加高,但很多时候并不是如此,只是提供一种优化的可能,只需要改 polynomial 参数即可。代码PLS全部改自 matlab 代码,并自行加入画图、高次项的优化和r2的评价函数。该代码基本已是完整代码,只有 def Polynomial(self): 函数代码有缺陷,如有更好想法可以一起改进。
如要搬运请注明出处,并和我联系谢谢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
import matplotlib.pyplot as plt import pandas as pd import numpy as np from sklearn import preprocessing from numpy.matlib import repmat import csv from math import ceil class Linear: def __init__(self, dependent, document, polynomial=1): self.dependent = dependent self.document = document self.polynomial = polynomial self.openfile() self.n = len(self.df.columns) - self.dependent self.Polynomial() x0, y0, num, xishu, ch0, xish, sol = self.find() self.save(sol=sol) self.PLOT(ch0=ch0, num=num, x0=x0, y0=y0, xishu=xishu, xish=xish) def openfile(self): file_type = self.document.split(".")[-1] if file_type == "csv": self.df = pd.read_csv(self.document, encoding='GBK') elif file_type == "xlsx" or file_type == "xls": self.df = pd.read_excel(self.document) else: exit("Unknown file type") def Polynomial(self): if self.polynomial != 1: temp = self.df.iloc[:, -self.dependent:] self.df.drop(self.df.columns[-self.dependent:], axis=1, inplace=True) count = self.n count_begin = 0 for i in range(1, self.polynomial): count_end = count for k in range(self.n): for j in range(count_begin, count_end): name = "x" + str(k + 1) + str(j + 1) if i == 1 else "x" + str(k + 1) + self.df.columns[j][1:] count += 1 self.df[name] = self.df.iloc[:, j].mul(self.df.iloc[:, k]) count_begin = count_end for i in range(len(temp.columns)): self.df[temp.columns[i]] = temp.iloc[:, i] self.df.to_csv("changed.csv", encoding='GBK') def find(self): df = self.df df_matrix = np.array(df) mu = np.mean(df_matrix, axis=0) sig = np.std(df_matrix, axis=0) rr = df.corr() rr.to_csv("相关系数矩阵.csv", encoding='GBK') data = preprocessing.scale(df_matrix) m = self.dependent n = len(df.columns) - m self.n = n x0 = df_matrix[:, :n] y0 = df_matrix[:, n:] e0 = data[:, :n] f0 = data[:, n:] num = len(df.iloc[:, 0]) chg = np.identity(n) w = np.zeros([n, n]) w_star = np.zeros([n, n]) t = np.zeros([num, n]) ss = [] Q_h2 = [] press_i = [0 for i in range(num)] press = [0 for i in range(n)] flag = 0 for i in range(n): matrix = e0.T @ f0 @ f0.T @ e0 [val, vec] = np.linalg.eig(matrix) val = val.argsort() w[:, i] = vec[:, val[len(val) - 1]] w_star[:, i] = chg @ w[:, i] t[:, i] = e0 @ w[:, i] alpha = [e0.T @ t[:, i] / (t[:, i].T @ t[:, i])] chg = chg @ (np.identity(n) - w[:, i:i + 1] @ alpha) e0 = e0 - t[:, i:i + 1] @ alpha beta = np.linalg.pinv(np.c_[t[:, :i + 1], np.ones(num)]) @ f0 beta = np.delete(beta, (-1), axis=0) cancha = f0 - t[:, :i + 1] @ beta cancha = np.array([[cancha[i][j] ** 2 for j in range(len(cancha[i]))] for i in range(len(cancha))]) ss.append(cancha.sum()) for j in range(num): t1 = t[:, :i + 1] f1 = f0 she_t = t1[j:j + 1, :] she_f = f1[j:j + 1, :] t1 = np.delete(t1, j, axis=0) f1 = np.delete(f1, j, axis=0) beta1 = np.linalg.pinv(np.c_[t1, np.ones(num - 1)]) @ f1 beta1 = np.delete(beta1, (-1), axis=0) cancha = she_f - she_t @ beta1 cancha = np.array([[cancha[i][j] ** 2 for j in range(len(cancha[i]))] for i in range(len(cancha))]) press_i[j] = cancha.sum() press[i] = np.array(press_i).sum() if i > 0: Q_h2.append(1 - press[i] / ss[i - 1]) # print('Q_h2[{}] = {}'.format(i, (1 - press[i] / ss[i - 1]))) else: Q_h2.append(1) if Q_h2[i] < 0.0975: # print('Number of components proposedr = %d' % (i + 1)) print("Q_h2 = {}".format(Q_h2[-1])) r = i flag = 1 break if not flag: exit("Can't find") beta_z = np.linalg.pinv(np.c_[t[:, :r + 1], np.ones(num)]) @ f0 beta_z = np.delete(beta_z, (-1), axis=0) xishu = w_star[:, :r + 1] @ beta_z mu_x = mu[:n] mu_y = mu[n:] sig_x = sig[:n] sig_y = sig[n:] ch0 = [] for i in range(m): ch0.append(float(mu_y[i] - np.true_divide(mu_x, sig_x) * sig_y[i] @ xishu[:, i:i + 1])) xish = np.zeros([n, m]) for i in range(m): xish[:, i] = np.true_divide(xishu[:, i], sig_x.T) * sig_y[i] sol = np.r_[np.array([ch0]), xish] # 防止报错 nan_2_0 # x0, y0, num, xishu, ch0, xish, sol = map(lambda x: np.nan_to_num(x), [x0, y0, num, xishu, ch0, xish, sol]) return x0, y0, num, xishu, ch0, xish, sol def PLOT(self, ch0, num, x0, y0, xishu, xish): plt.rcParams['font.sans-serif'] = ['SimHei'] # 用黑体显示中文 plt.rcParams['axes.unicode_minus'] = False ch0 = repmat(ch0, num, 1) y_hat = ch0 + x0 @ xish y1max = y_hat.max(axis=0) y2max = y0.max(axis=0) ymax = np.r_[np.array([y1max]), np.array([y2max])].max(axis=0) for i in range(self.dependent): print("y{}: R^2 score = {}".format(i + 1, R2_func(y_hat[:, i], self.df.iloc[:, -self.dependent + i]))) plt.subplot(self.dependent, 2, i * 2 + 1) x = [-1, ceil(ymax[i])] plt.plot(x, x, '-') plt.plot(y_hat[:, i], y0[:, i], '*') plt.title("y{}".format(i + 1)) plt.subplot(self.dependent, 2, i * 2 + 2) x = np.arange(self.n) plt.bar(x, height=xishu[:, i].reshape([1, self.n], order='F')[0], width=0.5) plt.plot([0, self.n], [0, 0], "-") plt.title("y{}".format(i + 1)) plt.tight_layout() plt.savefig("verify.jpg") plt.show() def save(self, sol): sol = np.r_[[["y{}".format(i + 1) for i in range(self.dependent)]], sol] sol = np.c_[["dependent", "x0"] + list(self.df.columns[:-self.dependent]), sol] print(sol) with open("result.csv", "w", newline="") as file: writer = csv.writer(file) writer.writerows(sol) def R2_func(y_test, y): return 1 - ((y_test - y) ** 2).sum() / ((y.mean() - y) ** 2).sum() if __name__ == '__main__': # 因变量个数,文件位置,次数 # 文件格式说明:第一行为数据名称(非数据),每一列不能全为0,请自行删除全为0的列 # 文件格式说明:第一列拒绝 index , 前面 m 列为自变量, 后面 n 列为因变量 # 文件类型说明: 支持 .csv .xlsx .xls Linear(1, "PLS2.csv", 1) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { limit_conn_zone $binary_remote_addr zone=one1:10m; limit_req_zone $binary_remote_addr zone=one2:10m rate=10r/s; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; include /etc/nginx/conf.d/*.conf; # 设置并发限制 server { listen 80; server_name 0.0.0.0; location / { #限制并发数2 limit_conn one1 2; #burst:如果请求的频率超过了限制域配置的值,请求处理会被延迟。 #nodelay:超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阈值,这个请求会被终止,并返回503 limit_req zone=one2 burst=10 nodelay; } } # http://asf.pancake2021.work 跳转 https server { listen 80; listen [::]:80; server_name asf.pancake2021.work; rewrite ^/(.*)$ https://asf.pancake2021.work/$1 permanent; } # http://120.55.67.201 和 http://120.55.67.201 跳转 https server { listen 80; listen [::]:80; server_name www.pancake2021.work pancake2021.work; rewrite ^/(.*)$ http://120.55.67.201/$1 permanent; } # http://120.55.67.201 和 http://120.55.67.201 的设置 server { listen 443 ssl; server_name pancake2021.work www.pancake2021.work; root /usr/share/nginx/html/wordpress; index index.html index.htm index.php; ssl_certificate /ca/pancake2021.work.pem; ssl_certificate_key /ca/pancake2021.work.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000"; location / { index index.html index.htm index.php; } location ~ .php$ { root /usr/share/nginx/html/wordpress; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } # 当别人域名解析至你服务器的时候 rewrite 至你的域名 server { listen 80 default_server; listen 443 ssl default_server; ssl_certificate /etc/nginx/cert/5832791_pancake2021.work.pem; ssl_certificate_key /etc/nginx/cert/5832791_pancake2021.work.key; server_name _; #return 502; rewrite ^/(.*)$ http://120.55.67.201/$1 permanent; } # steamcommunity 代理服务器地址 upstream steamcommunityServer { server 23.32.241.160:443; } # github 代理服务器地址 upstream githubServer { server 15.164.81.167:443; } # github 服务器代理设置 server { listen 443 ssl; server_name github.com; server_name www.github.com; ssl_certificate /ca/steamcommunity.crt;#下边签发的证书 ssl_certificate_key /ca/steamcommunity.key; location / { proxy_pass https://githubServer/; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; } } # steamcommunity 服务器代理设置 server { listen 443 ssl; server_name steamcommunity.com; server_name www.steamcommunity.com; ssl_certificate /ca/steamcommunity.crt;#下边签发的证书 ssl_certificate_key /ca/steamcommunity.key; location / { proxy_pass https://steamcommunityServer/; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; } } # asf 挂卡网站配置 server { listen *:443 ssl; server_name asf.pancake2021.work; ssl_certificate /ca/asf.pem; ssl_certificate_key /ca/asf.key; location ~* /Api/NLog { proxy_pass http://127.0.0.1:1242; # 只需在您需要覆盖默认 Host 时启用 # proxy_set_header Host 127.0.0.1; # 代理 ASF 请求时,应该始终指定 X- 前缀的 HTTP 头 # 这对正确鉴别源 IP 至关重要,使 ASF 能够封禁真正的攻击者而非您的 Nginx 服务器 # 指定这些头后,ASF 能正确解析发送请求用户的 IP 地址 - 使 Nginx 真正成为反向代理 # 如果不这样设置,ASF 会认为您的 Nginx 是客户端 - 此时 Nginx 只是一个普通的代理程序 # 如果您无法在同一台机器上同时运行 Nginx 与 ASF,则应该额外设置正确的 KnownNetworks proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Real-IP $remote_addr; # 我们添加了这 3 个额外的选项用于 WebSockets 代理,详见 https://nginx.org/en/docs/http/websocket.html proxy_http_version 1.1; proxy_set_header Connection "Upgrade"; proxy_set_header Upgrade $http_upgrade; } location / { proxy_pass http://127.0.0.1:1242; # 只需在您需要覆盖默认 Host 时启用 # proxy_set_header Host 127.0.0.1; # 代理 ASF 请求时,应该始终指定 X- 前缀的 HTTP 头 # 这对正确鉴别源 IP 至关重要,使 ASF 能够封禁真正的攻击者而非您的 Nginx 服务器 # 指定这些头后,ASF 能正确解析发送请求用户的 IP 地址 - 使 Nginx 真正成为反向代理 # 如果不这样设置,ASF 会认为您的 Nginx 是客户端 - 此时 Nginx 只是一个普通的代理程序 # 如果您无法在同一台机器上同时运行 Nginx 与 ASF,则应该额外设置正确的 KnownNetworks proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Real-IP $remote_addr; } } } |
此服务器暂时有 ftp; jupyter-notebook; asf steam挂卡; github 加速; steamcommunity 加速; frp; wordpress 这些功能
此nginx配置文档实现 asf steam挂卡; github 加速; steamcommunity 加速; wordpress 的网络设置
因为不想用户通过http访问而是通过https访问,所有没有设置http的访问方式,直接全部rewrite
ps: 陆续有时间我会更新这些功能的全部设置方式
镜像可以需下载arm64版本,可选win11或者win10。下载一路点确定就行,然后解压下载后的文件。windows,mac,linux电脑各自运行里面的不同的文件,会开始进行各个文件的下载,下载完后会进行uup到iso的转换,期间过程较慢,请不要中途中断,否则可能你电脑磁盘会多出一个你删不掉的文件夹,大致需要半天到一天的时间,根据不同电脑而定。之后就可以用树莓派4b相关软件进行镜像烧录。可以添加的启动项:
over_voltage=6
arm_freq=2000
浙ICP备2021019730-1 浙公网安备 33010902002953号
Copyright © 2024 PanCake