From 675abf7265586a96e73297408113ea85c26045a6 Mon Sep 17 00:00:00 2001 From: PinkR1ver <3180102330@zju.edu.cn> Date: Wed, 3 Apr 2024 10:31:06 +0800 Subject: [PATCH] Add note --- ...e calibration for UWB simulation system.md | 26 +++ content/.trash/curve_assessment_parameters.md | 3 + ...is_based_on_multimodal_mri_segmentation.md | 0 content/.trash/where_to_play.md | 11 + .../coding_knowledge/coding_lang_MOC.md | 2 + .../Pasted image 20240402114110.png | Bin 0 -> 72726 bytes .../coding_knowledge/js/promise.md | 201 ++++++++++++++++++ content/data_sci/data_sci_MOC.md | 2 + content/data_sci/fit/error_function.md | 44 ++++ content/data_sci/fit/intro.md | 17 ++ 10 files changed, 306 insertions(+) create mode 100644 content/.trash/New approach of zero-time calibration for UWB simulation system.md create mode 100644 content/.trash/curve_assessment_parameters.md rename content/{ => .trash}/paper_draft/radiogenomics_analysis_based_on_multimodal_mri_segmentation.md (100%) create mode 100644 content/.trash/where_to_play.md create mode 100644 content/computer_sci/coding_knowledge/js/attachments/Pasted image 20240402114110.png create mode 100644 content/computer_sci/coding_knowledge/js/promise.md create mode 100644 content/data_sci/fit/error_function.md create mode 100644 content/data_sci/fit/intro.md diff --git a/content/.trash/New approach of zero-time calibration for UWB simulation system.md b/content/.trash/New approach of zero-time calibration for UWB simulation system.md new file mode 100644 index 000000000..b9ed36017 --- /dev/null +++ b/content/.trash/New approach of zero-time calibration for UWB simulation system.md @@ -0,0 +1,26 @@ +# 基于矢量网络分析仪的UWB设备模拟系统中天线延迟校准的新方法 + +# A Novel Approach for Antenna Delay Calibration in a UWB Device Simulation System Based on Vector Network Analyzer + +## Abstract + +## INTRODUCTION + +With the rapid advancement of wireless communication technologies, Ultra-Wideband (UWB) has demonstrated immense potential in the fields of short-range wireless communication and precise positioning due to its high time resolution and low power consumption characteristics. Antenna delay in UWB nodes is one of the critical factors affecting positioning accuracy. Therefore, developing an effective antenna delay calibration method is essential for enhancing the performance of UWB positioning systems. + + + +## ANTENNA DELAY CALIBRATION SYSTEM + + + +## EXPERIMENT + + + +## CONCLUSION + +## REFERENCE + + + diff --git a/content/.trash/curve_assessment_parameters.md b/content/.trash/curve_assessment_parameters.md new file mode 100644 index 000000000..18b63196f --- /dev/null +++ b/content/.trash/curve_assessment_parameters.md @@ -0,0 +1,3 @@ +--- +title: +--- diff --git a/content/paper_draft/radiogenomics_analysis_based_on_multimodal_mri_segmentation.md b/content/.trash/paper_draft/radiogenomics_analysis_based_on_multimodal_mri_segmentation.md similarity index 100% rename from content/paper_draft/radiogenomics_analysis_based_on_multimodal_mri_segmentation.md rename to content/.trash/paper_draft/radiogenomics_analysis_based_on_multimodal_mri_segmentation.md diff --git a/content/.trash/where_to_play.md b/content/.trash/where_to_play.md new file mode 100644 index 000000000..4aaef59a9 --- /dev/null +++ b/content/.trash/where_to_play.md @@ -0,0 +1,11 @@ +--- +title: Where to play +tags: + - tmp +date: 2024-03-31 +draft: "False" +--- +- [ ] 露营烧烤 + 户外活动 +- [ ] 安吉烧烤 + 温泉 (过夜) +- [ ] 富阳动物园 +- [ ] 爬山 \ No newline at end of file diff --git a/content/computer_sci/coding_knowledge/coding_lang_MOC.md b/content/computer_sci/coding_knowledge/coding_lang_MOC.md index ecf24c19b..42ba6edda 100644 --- a/content/computer_sci/coding_knowledge/coding_lang_MOC.md +++ b/content/computer_sci/coding_knowledge/coding_lang_MOC.md @@ -35,4 +35,6 @@ date: 2024-03-27 * [For Loop](computer_sci/coding_knowledge/js/for_loop.md) * [var, let, const](computer_sci/coding_knowledge/js/var_let_const.md) * [Rest Parameters, Argument Objects, Spread Syntax](computer_sci/coding_knowledge/js/rest_parameters_argument_objects_spread_syntax.md) +* [Memoization](computer_sci/coding_knowledge/js/memoization.md) +* [Promise](computer_sci/coding_knowledge/js/promise.md) diff --git a/content/computer_sci/coding_knowledge/js/attachments/Pasted image 20240402114110.png b/content/computer_sci/coding_knowledge/js/attachments/Pasted image 20240402114110.png new file mode 100644 index 0000000000000000000000000000000000000000..8a5e480724aee8b6715b09f12abfca33681e079c GIT binary patch literal 72726 zcmeFZi96K&_djmN$WUaDN@OehQV7Mg*muI%$Cgk@CCWD1?1~~GvWLkQ5n(DSsgyN@ ztcC3R{yQ&p-*@->{{92M>vLT$S7DypIp=X6XL&w@^mJ6|Xm`?5P*BjRtDP{QpxA<= zprE{gMZ-@ni#yLyP;gVIpE!Eb6ZNZO>ls7GYimC83d&I`Pum_nXw@iFD7-PE=N>@H zYTEUMwIge3pH`btcY$7#OzUOJ>oL=H25Fz`4KRfbXK1zQsIKs^h%G%kr^?A~aoGav zZ*M5|Ir>K71%kSTT8sL->IBbMsKmbcd7s;fRqhvg-Mr=Q=eqaF&&t(ZNvOMcrbQ`X zD&A@DIV?Ak0{!oAKkz<{jGd zUq8PjiX)~Ck0xFC_ZpBHF!#cDA=vX!f#Y$Tlufgv9WNI3kVqv_80*^?k$#0 z@W=8GvuSCg#jRJ{2CUmhE~`h{%Sj~h;A#E^Vg8<22151m2q^}M6e2cH$H?gZSbO4w z2M;7=dBw%YnoMM77gr+r9^_XS{_CT-48U0V5%#Q`xc5{ii0(aK_2bUA-1duCTp1nQ zTELbgw150+IR-B{#wqkCHsUpi6txB&+IEaFH(<_qos5oix{1-v3y5~6v8y`exd)|D}e_V z%&c$Ai6QNWKdrXP`1r>ZL@~tEw2GdjMRCHR3_fChjQ-P65e2|^xWQ&pz>$TGzIyt{ z=PA(YAU+LwIfWBsZkTGz;Qp+jKeQmm8aBS{qqUVWP@B+5;nGn$Q|?>Ir=A~GWBjk7 zuvOeRA}i(2IBo(BijnXzD@&}aSn0rl13t~aUc7i=V%@4nbO;*Fi1_1k#02p2(~Y|t zsZd8~9%p6k53cRc%B?*8bVNu@?DC=AIvIwMe5Uk2Gt=QO{_thwK3K897$G(Q_W|uZ z-#k3$artsEd+o?&ufuyJrGy7;TN(cR1ciSMEdxQ@ICO?FFPfOVzhL*BTjvUPGrWv0 zVmU4P=fUAL;Ajor*L`CA4<9!(V72%8<{ zs~Y~}2sRH~kQGEBsHC8Zn?v`+UN6`kD5BMqv!s)9?T^1Ew!#=6no|m?{XJ;{A8ACU zT2*%SPLygsljz_ADPrNf6`Y@r#70ER{As4fN{3D>{c*~7EKq1t-_@tGm{4ABv`9vSQ*nEP z-)|Wb$qL39P~D=!H;g5G!je)iQz-n4L$V_>i2M$?J#L9I zGGbK*eJPT5v~FJ>b{}pAd=7ZMS3OdMx}r?X@83-F4i5H+=`lEnzQx9XGIn h8D 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

eGd6sra{)s*icO1NuqlW@Y6n$* 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 literal 0 HcmV?d00001 diff --git a/content/computer_sci/coding_knowledge/js/promise.md b/content/computer_sci/coding_knowledge/js/promise.md new file mode 100644 index 000000000..a64ea6bca --- /dev/null +++ b/content/computer_sci/coding_knowledge/js/promise.md @@ -0,0 +1,201 @@ +--- +title: Promise in JS +tags: + - advanced + - javascript + - coding-language +date: 2024-03-31 +--- +**Promise** 是 JavaScript 中用来处理异步操作的类。它提供了一种更简洁、更易于理解的方式来处理异步操作的结果。 + + +# Asynchronous coding + + +在前端编程中(甚至后端有时也是这样),我们在处理一些简短、快速的操作时,例如计算 1 + 1 的结果,往往在主线程中就可以完成。主线程作为一个线程,不能够同时接受多方面的请求。所以,当一个事件没有结束时,界面将无法处理其他请求。 + +现在有一个按钮,如果我们设置它的 onclick 事件为一个死循环,那么当这个按钮按下,整个网页将失去响应。 + +为了避免这种情况的发生,我们常常用子线程来完成一些可能消耗时间足够长以至于被用户察觉的事情,比如读取一个大文件或者发出一个网络请求。因为子线程独立于主线程,所以即使出现阻塞也不会影响主线程的运行。但是子线程有一个局限:一旦发射了以后就会与主线程失去同步,我们无法确定它的结束,如果结束之后需要处理一些事情,比如处理来自服务器的信息,我们是无法将它合并到主线程中去的。 + +为了解决这个问题,JavaScript 中的异步操作函数往往通过回调函数来实现异步任务的结果处理。 + +![](computer_sci/coding_knowledge/js/attachments/Pasted%20image%2020240402114110.png) + + + + +# How `Promise` work + +`Promise`是一个对象,它代表了一个异步操作的最终完成或者失败。 + +本质上`Promise`是一个函数返回的对象,我们可以在它上面绑定回调函数,这样我们就不需要在一开始把回调函数作为参数传入这个函数了。 + +## Demo + +假设现在有一个名为 `createAudioFileAsync()` 的函数,它接收一些配置和两个回调函数,然后异步地生成音频文件。一个回调函数在文件成功创建时被调用,另一个则在出现异常时被调用。 + +```js +function successCallback(result) { + console.log("音频文件创建成功:" + result); +} + +// 失败的回调函数 +function failureCallback(error) { + console.log("音频文件创建失败:" + error); +} + +createAudioFileAsync(audioSettings, successCallback, failureCallback); +``` + +如果使用Promise的写法,可以把回调函数附加到它上面, + +```js +createAudioFileAsync(audioSettings).then(successCallback, failureCallback); +``` + + +一个完整的template: + +```js +const userLeft = false +const userWatchingCatMeme = false + +function watchTutorialPromise() = { + return new Promise((resolve, reject) => { + if (userLeft) { + reject({ + name: 'User Left', + message: ':(' + }) + } else if (userWatchCatMeme) { + reject({ + name: 'User Watching Cat Meme', + message: 'WedDevSimplified < Cat' + }) + } else { + resove('Thumbs up and Subscribe') + } + }) +} + +watchTutorialPromise().then((message) => { + conolse.log('Success:' + message) +}).catch((error) => { + console.log(error.name = '' + error.message) +}) +``` + +这样的写法形式有若干优点 + + +# `Promise` 的优点 +## 链式调用 + +连续执行两个或者多个异步操作是一个常见的需求,在上一个操作执行成功之后,开始下一个的操作,并带着上一步操作所返回的结果。在旧的回调风格中,这种操作会导致经典的回调地狱 + +```js +doSomething(function (result) { + doSomethingElse(result, function (newResult) { + doThirdThing(newResult, function (finalResult) { + console.log(`得到最终结果:${finalResult}`); + }, failureCallback); + }, failureCallback); +}, failureCallback); +``` + + +有了`Promise`,我们就可以通过一个`Promise`链来解决这个问题。这就是`Promise` API 的优势,因为回调函数是附加到返回的`Promise`对象上的,而不是传入一个函数中。 + +`then()` 函数会返回一个和原来不同的**新的 Promise**: + +```js +const promise = doSomething() +const promise2 = promise.then(successCallback, failureCallback) +``` + +`promise2` 不仅表示 `doSomething()` 函数的完成,也代表了你传入的 `successCallback` 或者 `failureCallback` 的完成,这两个函数也可以返回一个 Promise 对象,从而形成另一个异步操作,这样的话,在 `promise2` 上新增的回调函数会排在这个 Promise 对象的后面。 + +就像这样,每一个 Promise 都代表了链中另一个异步过程的完成。此外,`then` 的参数是可选的,`catch(failureCallback)` 等同于 `then(null, failureCallback)`——所以如果你的错误处理代码对所有步骤都是一样的,你可以把它附加到链的末尾: + +```js +doSomething() + .then(function (result) { + return doSomethingElse(result); + }) + .then(function (newResult) { + return doThirdThing(newResult); + }) + .then(function (finalResult) { + console.log(`得到最终结果:${finalResult}`); + }) + .catch(failureCallback); + +doSomething() + .then((result) => doSomethingElse(result)) + .then((newResult) => doThirdThing(newResult)) + .then((finalResult) => { + console.log(`得到最终结果:${finalResult}`); + }) + .catch(failureCallback); + + +``` + +> [!note] +> **注意**:一定要有返回值,否则,回调将无法获取上一个 Promise 的结果。(如果使用箭头函数,`() => x` 比 `() => { return x; }` 更简洁一些,但后一种保留 `return` 的写法才支持使用多个语句)。如果上一个处理程序启动了一个 Promise 但并没有返回它,那就没有办法再追踪它的状态了,这个 Promise 就是“漂浮”的。 +> + + + +# key in `Promise` + +## async && await + +**async**:用于定义异步函数,确保函数始终返回一个 Promise。当在函数声明或函数表达式前使用 async 关键字时,它变成一个异步函数。从异步函数返回的非 Promise 对象会自动包装成 Promise 对象。 + + +**await**: 用于暂停异步函数的执行,直到 Promise 解析。它只能在异步函数内部使用。当在 Promise 之前使用 await 时,它等待 Promise 解析或拒绝。如果已解析,它继续执行下一行代码;如果等待的 Promise 被拒绝,将抛出异常。使用 await 允许您以更顺序且可读的方式编写异步代码,而无需使用 .then() 显式链接 Promise。 + +### demo code + +```js +async function example() { + console.log('Before await'); + const result = await someAsyncOperation().then((message) => { + console.log('Inside then', message); + }); // 等待 Promise 解决 + console.log('After await', result); + return new Promise((resolve) => { + setTimeout(() => { + resolve('FUCK'); + }, 10); + }); + } + + function someAsyncOperation() { + return new Promise(resolve => { + setTimeout(() => { + resolve('Hello'); + }, 10); + }); + } + +var a = example(); +console.log(a) +setTimeout(() => { + a.then((message) => { + console.log('Inside then', message); + }); +}, 1000) +``` + +## `Promise.all()` + +当需要同时执行多个异步操作并等待它们全部完成后,通常会使用 `Promise.all()` 方法。 + + +# Reference + +* https://www.youtube.com/watch?v=DHvZLI7Db8E&t=85s +* https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Using_promises \ No newline at end of file diff --git a/content/data_sci/data_sci_MOC.md b/content/data_sci/data_sci_MOC.md index 43767891f..c782e3049 100644 --- a/content/data_sci/data_sci_MOC.md +++ b/content/data_sci/data_sci_MOC.md @@ -8,6 +8,8 @@ date: 2023-12-18 # Basic Concept +# Curve Fitting + # [Stochastic Process](data_sci/stochastic_process/MOC.md) diff --git a/content/data_sci/fit/error_function.md b/content/data_sci/fit/error_function.md new file mode 100644 index 000000000..42c73f012 --- /dev/null +++ b/content/data_sci/fit/error_function.md @@ -0,0 +1,44 @@ +--- +title: Error function we can choose in curve fitting +tags: + - basic + - data + - math +date: 2024-04-01 +--- +在曲线拟合中,选择误差函数(error function)是为了衡量模型预测值与实际观测值之间的差异。误差函数通常用于优化过程中,指导算法调整模型参数以最小化误差。以下是一些常用的误差函数: + +1. **均方误差(Mean Squared Error, MSE)**: + - 误差的平方和的平均值,是最常用的误差函数之一。 + - 公式:$MSE = (1/n) * Σ(y_i - f(x_i))^2$,其中$y_i$是实际观测值,$f(x_i)$是模型预测值,$n$是数据点的数量。 + +2. **均方根误差(Root Mean Squared Error, RMSE)**: + - MSE的平方根,与观测值具有相同的单位,因此更容易解释。 + - 公式:$RMSE = √(1/n) * Σ(y_i - f(x_i))^2$。 + +3. **平均绝对误差(Mean Absolute Error, MAE)**: + - 误差的绝对值的平均值,对异常值不如MSE敏感。 + - 公式:$MAE = (1/n) * Σ|y_i - f(x_i)|$。 + +4. **平均绝对百分比误差(Mean Absolute Percentage Error, MAPE)**: + - 误差与实际观测值的百分比的绝对值的平均值,常用于百分比或比率数据的拟合。 + - 公式:$MAPE = (1/n) * Σ|(y_i - f(x_i))/y_i| * 100%$。 + +5. **对数似然误差(Log-Likelihood Error)**: + - 常用于概率模型,如最大似然估计。 + - 公式依赖于特定的概率分布。 + +6. **交叉熵误差(Cross-Entropy Error)**: + - 也称为对数损失,常用于分类问题和神经网络的训练。 + - 公式:$Cross-Entropy = -Σy_i * log(f(x_i)) + (1 - y_i) * log(1 - f(x_i))$。 + +7. **Huber损失(Huber Loss)**: + - 结合了MSE和MAE的特点,对异常值具有较强的鲁棒性。 + - 公式:$Huber(y_i, f(x_i), δ) = |y_i - f(x_i)| if |y_i - f(x_i)| ≤ δ, (1/2) * (|y_i - f(x_i)|^2 - δ^2) otherwise$。 + +8. **分位数损失(Quantile Loss)**: + - 用于分位数回归,关注模型预测的分位数与实际观测值的分位数之间的误差。 + - 公式:$Quantile Loss = Σ(τ * (y_i - f(x_i)) if y_i > f(x_i), (1 - τ) * (f(x_i) - y_i) otherwise$,其中τ是分位数。 + + +在选择误差函数时,应考虑数据的特性、模型的目的和误差分布。例如,对于包含许多异常值的数据,使用Huber损失或MAE可能更合适。对于概率预测问题,对数似然误差或交叉熵误差可能更适用。 \ No newline at end of file diff --git a/content/data_sci/fit/intro.md b/content/data_sci/fit/intro.md new file mode 100644 index 000000000..a314ee6cf --- /dev/null +++ b/content/data_sci/fit/intro.md @@ -0,0 +1,17 @@ +--- +title: Simple Intro about fitting +tags: + - basic + - data + - math +date: 2024-04-01 +--- +# What we need in fit + + +* Model +* Data +* Coefficient +* Optimzation Options +* Weights for data +* Constrains \ No newline at end of file